-
Notifications
You must be signed in to change notification settings - Fork 10
Closed
Description
Requirements
From #118, #122, and myself, the requirements are:
- The cursor can accept position instructions. Callers should be able to specify time, position (x, y), measure index/number with or without repeat information, next(n), previous(n), and the cursor should update its position accordingly.
vexmlcan generate default position instructions coupled to time.- The cursor provides information about the active elements, including provenance information about the MusicXML that is associated with the active elements.
- The cursor emits events:
activeelementchange,positioninstructionreceived,cursorexhausted, etc.. - The cursor's visibility is toggleable.
- A rendering can accommodate multiple cursors. Each cursor is agnostic to one another and therefore it is the caller's responsibility to coordinate them.
- Cursors can be styled.
- Cursors can be interpolated between voice entries or they can snap to the closest voice entry given the last position instruction.
- Cursors can navigate through entire voice entries or they can navigate individual elements within a voice. The former is typically more useful for reading music, while the latter is more useful for editing MusicXML.
Hints
I would like something that is derived from the *Rendering object tree that accomplishes all of these things. Right now, the *Rendering object tree expose the underlying vexflow objects, but I would like callers to not have to interact with that.
I recommend creating a new library within this project called cursor, which will house all the logic needed to accomplish the requirements. Consider converting the *Rendering object tree to something more useful for the cursor as a first step, which will also have the benefit of decoupling cursor from rendering. That way, if rendering has to change significantly, the cursor library should only need to be updated in one place.
Inspiration
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels