X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcompletion-note-heads-engraver.cc;h=fb67686f96b945c37e062867507ff6a08c0581f9;hb=8331554b76548e31544738675fe5c6ab86fc5949;hp=7bdf2e3ba5d1f685f39c252ae387fcd650cb7510;hpb=64313890b232c731d432e5b096f30bffc3f3756d;p=lilypond.git diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index 7bdf2e3ba5..fb67686f96 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -7,20 +7,22 @@ #include using namespace std; -#include "rhythmic-head.hh" -#include "output-def.hh" -#include "music.hh" -#include "dots.hh" #include "dot-column.hh" -#include "staff-symbol-referencer.hh" +#include "dots.hh" +#include "duration.hh" +#include "global-context.hh" #include "item.hh" +#include "output-def.hh" +#include "pitch.hh" +#include "rhythmic-head.hh" #include "score-engraver.hh" -#include "warn.hh" #include "spanner.hh" +#include "staff-symbol-referencer.hh" +#include "stream-event.hh" #include "tie.hh" -#include "global-context.hh" -#include "duration.hh" -#include "pitch.hh" +#include "warn.hh" + +#include "translator.icc" /* TODO: make matching rest engraver. @@ -43,13 +45,13 @@ using namespace std; class Completion_heads_engraver : public Engraver { - Link_array notes_; - Link_array prev_notes_; - Link_array ties_; + vector notes_; + vector prev_notes_; + vector ties_; - Link_array dots_; - Link_array note_events_; - Link_array scratch_note_events_; + vector dots_; + vector note_events_; + vector scratch_note_events_; Moment note_end_mom_; bool is_first_; @@ -65,9 +67,9 @@ public: protected: virtual void initialize (); void start_translation_timestep (); - virtual bool try_music (Music *event); void process_music (); void stop_translation_timestep (); + DECLARE_TRANSLATOR_LISTENER (note); }; void @@ -76,31 +78,24 @@ Completion_heads_engraver::initialize () is_first_ = false; } -bool -Completion_heads_engraver::try_music (Music *m) +IMPLEMENT_TRANSLATOR_LISTENER (Completion_heads_engraver, note); +void +Completion_heads_engraver::listen_note (Stream_event *ev) { - if (m->is_mus_type ("note-event")) - { - note_events_.push_back (m); - - is_first_ = true; - Moment musiclen = m->get_length (); - Moment now = now_mom (); - - if (now_mom ().grace_part_) - { - musiclen.grace_part_ = musiclen.main_part_; - musiclen.main_part_ = Rational (0, 1); - } - note_end_mom_ = max (note_end_mom_, (now + musiclen)); - do_nothing_until_ = Rational (0, 0); + note_events_.push_back (ev); + + is_first_ = true; + Moment musiclen = get_event_length (ev); + Moment now = now_mom (); - return true; + if (now_mom ().grace_part_) + { + musiclen.grace_part_ = musiclen.main_part_; + musiclen.main_part_ = Rational (0, 1); } - else if (m->is_mus_type ("busy-playing-event")) - return note_events_.size () && is_first_; - return false; + note_end_mom_ = max (note_end_mom_, (now + musiclen)); + do_nothing_until_ = Rational (0, 0); } /* @@ -194,14 +189,14 @@ Completion_heads_engraver::process_music () if (!scratch_note_events_.size ()) for (vsize i = 0; i < note_events_.size (); i++) { - Music *m = note_events_[i]->clone (); + Stream_event *m = note_events_[i]->clone (); scratch_note_events_.push_back (m); } } for (vsize i = 0; left_to_do_ && i < note_events_.size (); i++) { - Music *event = note_events_[i]; + Stream_event *event = note_events_[i]; if (scratch_note_events_.size ()) { event = scratch_note_events_[i]; @@ -296,13 +291,19 @@ Completion_heads_engraver::Completion_heads_engraver () { } -#include "translator.icc" - ADD_TRANSLATOR (Completion_heads_engraver, /* doc */ "This engraver replaces " "@code{Note_heads_engraver}. It plays some trickery to " "break long notes and automatically tie them into the next measure.", - /* create */ "NoteHead Dots Tie", - /* accept */ "busy-playing-event note-event", - /* read */ "middleCPosition measurePosition measureLength", + /* create */ + "NoteHead " + "Dots " + "Tie", + + /* accept */ "note-event", + /* read */ + "middleCPosition " + "measurePosition " + "measureLength", + /* write */ "");