From f46e60cbcfaccfccfef056bf3aa8c6059ab7e2a8 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 10 Apr 2003 19:40:10 +0000 Subject: [PATCH] * input/regression/multi-measure-rest-grace.ly (texidoc): new file * lily/multi-measure-rest-engraver.cc (start_translation_timestep): use grace timing too for determining when to make mmrest. (start_translation_timestep): clear numbers too. --- ChangeLog | 9 +++++++++ input/regression/multi-measure-rest-grace.ly | 10 ++++++++++ lily/multi-measure-rest-engraver.cc | 17 ++++++++++++----- 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 input/regression/multi-measure-rest-grace.ly diff --git a/ChangeLog b/ChangeLog index 6b474af608..32a8457829 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2003-04-10 Han-Wen Nienhuys + + * input/regression/multi-measure-rest-grace.ly (texidoc): new file + + * lily/multi-measure-rest-engraver.cc + (start_translation_timestep): use grace timing too for determining + when to make mmrest. + (start_translation_timestep): clear numbers too. + 2003-04-09 Juergen Reuter * scm/music-types.scm: compile fix: escape braces diff --git a/input/regression/multi-measure-rest-grace.ly b/input/regression/multi-measure-rest-grace.ly new file mode 100644 index 0000000000..06b7551f8c --- /dev/null +++ b/input/regression/multi-measure-rest-grace.ly @@ -0,0 +1,10 @@ +\header { +texidoc= "Grace notes and multi-measure rests." +} + +\score { +\notes < + \context Staff = SB { R1 R1 R1*3 } + \context Staff = SA { \clef bass c1 \grace c8 c2 c2 c1 \grace c16 c2 c2 c1 } +> +} diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 72aedc7d28..a79dd46055 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -38,7 +38,7 @@ private: Link_array text_events_; int start_measure_; Moment start_moment_; - + Rational last_main_moment_; Spanner *mmrest_; Link_array numbers_; @@ -168,6 +168,7 @@ Multi_measure_rest_engraver::process_music () for (int i = 0; i < numbers_.size(); i++) add_bound_item (numbers_[i], it); } + if (last_rest_) { add_bound_item (last_rest_,it); @@ -232,12 +233,15 @@ Multi_measure_rest_engraver::start_translation_timestep () { SCM smp = get_property ("measurePosition"); Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); - - if (mmrest_ && !mp.to_bool ()) + + Moment now =now_mom (); + if (mmrest_ + && now.main_part_ != last_main_moment_ + && mp.main_part_ == Rational (0)) { last_rest_ = mmrest_; last_numbers_ = numbers_; - + int cur = gh_scm2int (get_property ("currentBarNumber")); int num = cur - start_measure_; last_rest_->set_grob_property ("measure-count", gh_int2scm (num)); @@ -250,7 +254,8 @@ Multi_measure_rest_engraver::start_translation_timestep () } mmrest_ = 0; - + numbers_.clear (); + Grob * last = last_numbers_.size() ? last_numbers_[0] : 0; if (last && last->get_grob_property ("text") == SCM_EOL) { @@ -269,6 +274,8 @@ Multi_measure_rest_engraver::start_translation_timestep () } } } + + last_main_moment_ = now.main_part_; } void -- 2.39.2