From 22b0cf5fe325867b7af993d2af1dfa9330d299dc Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 1 May 2008 16:23:17 -0300 Subject: [PATCH] Fix #578. 3 unrelated fixes: - correctly schedule timestamp of next event in Completion_heads_engraver - Add a melisma property completionBusy, and write it in Completion_heads_engraver - Override length of the generated note head too, so the busyGrobs list is correctly calculated. --- input/regression/completion-heads-lyrics.ly | 25 +++++++++++++++++++++ lily/completion-note-heads-engraver.cc | 8 ++++--- lily/lyric-combine-music-iterator.cc | 6 +++-- scm/define-context-properties.scm | 3 ++- 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 input/regression/completion-heads-lyrics.ly diff --git a/input/regression/completion-heads-lyrics.ly b/input/regression/completion-heads-lyrics.ly new file mode 100644 index 0000000000..0df5fcd75a --- /dev/null +++ b/input/regression/completion-heads-lyrics.ly @@ -0,0 +1,25 @@ +\header { + texidoc = "You can put lyrics under completion heads." +} +\version "2.11.45" + +mel = \relative c'' { + c1. c1. +} + +lyr = \lyricmode { + One two +} + +\score { + \new Score << + \new Staff << + \new Voice = "completion" \with { + \remove "Note_heads_engraver" + \remove "Forbid_line_break_engraver" + \consists "Completion_heads_engraver" + } \mel + >> + \new Lyrics \lyricsto "completion" \lyr + >> +} diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index a83c961727..8734b861c2 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -166,6 +166,7 @@ Completion_heads_engraver::process_music () event->set_property ("pitch", pits); event->set_property ("duration", note_dur.smobbed_copy ()); + event->set_property ("length", Moment (note_dur.get_length ()).smobbed_copy ()); event->set_property ("duration-log", scm_from_int (note_dur.duration_log ())); Item *note = make_note_head (event); @@ -187,9 +188,8 @@ Completion_heads_engraver::process_music () } left_to_do_ -= note_dur.get_length (); - if (left_to_do_) - get_global_context ()->add_moment_to_process (now.main_part_ + left_to_do_); + get_global_context ()->add_moment_to_process (now.main_part_ + note_dur.get_length()); /* don't do complicated arithmetic with grace notes. */ @@ -217,6 +217,8 @@ Completion_heads_engraver::start_translation_timestep () note_events_.clear (); prev_notes_.clear (); } + context ()->set_property ("completionBusy", + ly_bool2scm (note_events_.size ())); } Completion_heads_engraver::Completion_heads_engraver () @@ -240,5 +242,5 @@ ADD_TRANSLATOR (Completion_heads_engraver, "measureLength ", /* write */ - "" + "completionBusy " ); diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc index bf5d02d8b2..c80fe02998 100644 --- a/lily/lyric-combine-music-iterator.cc +++ b/lily/lyric-combine-music-iterator.cc @@ -97,13 +97,15 @@ Lyric_combine_music_iterator::set_music_context (Context *to) { if (music_context_) { - music_context_->event_source ()->remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event")); + music_context_->event_source ()-> + remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event")); } music_context_ = to; if (to) { - to->event_source ()->add_listener (GET_LISTENER (set_busy), ly_symbol2scm ("music-event")); + to->event_source ()->add_listener (GET_LISTENER (set_busy), + ly_symbol2scm ("music-event")); } } diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index e506ed24fe..f656942b16 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -148,6 +148,7 @@ Values of 7 and -7 are common.") (clefPosition ,number? "Where should the center of the clef symbol go, measured in half staff spaces from the center of the staff.") + (completionBusy ,boolean? "Whether a completion-note head is playing.") (connectArpeggios ,boolean? "If set, connect arpeggios across piano staff.") (countPercentRepeats ,boolean? "If set, produce counters for @@ -581,4 +582,4 @@ and subscripts. See @file{scm/script.scm} for more information.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public default-melisma-properties - '(melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy)) + '(melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy completionBusy)) -- 2.39.5