From cfe516803c46e07a0fd2273d61c2ddef269a5461 Mon Sep 17 00:00:00 2001 From: hanwen Date: Sat, 24 Jan 2004 01:05:34 +0000 Subject: [PATCH] * lily/multi-measure-rest-engraver.cc: use a single MultiMeasureEvent for mm rests. This prevents problems with the new part combiner. * scm/music-functions.scm (determine-split-list): analysis has global effect: a difference halfway a phrase makes the entire phrase be typeset as apart. (make-multi-measure-rest): make mmrest as a single rhythmic event. --- ChangeLog | 5 ++ .../multi-measure-rest-multi-staff-center.ly | 2 +- lily/multi-measure-rest-engraver.cc | 64 ++++++------------- scm/define-music-types.scm | 2 +- scm/music-functions.scm | 12 +--- 5 files changed, 28 insertions(+), 57 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d8e13a48d..838936fdf1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,13 @@ 2004-01-24 Han-Wen Nienhuys + * lily/multi-measure-rest-engraver.cc: use a single + MultiMeasureEvent for mm rests. This prevents problems with the + new part combiner. + * scm/music-functions.scm (determine-split-list): analysis has global effect: a difference halfway a phrase makes the entire phrase be typeset as apart. + (make-multi-measure-rest): make mmrest as a single rhythmic event. 2004-01-23 Han-Wen Nienhuys diff --git a/input/regression/multi-measure-rest-multi-staff-center.ly b/input/regression/multi-measure-rest-multi-staff-center.ly index 5ed082757b..93ee2c4d2d 100644 --- a/input/regression/multi-measure-rest-multi-staff-center.ly +++ b/input/regression/multi-measure-rest-multi-staff-center.ly @@ -6,7 +6,7 @@ independent on prefatory matter in other staves." \score { \notes << \new Staff { R1 } - \new Staff { r1 \clef bass } + \new Staff { f'1 \clef bass } >> diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 8099c3a517..644c93d3ef 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -32,21 +32,19 @@ protected: virtual void finalize (); private: - Music * new_req_; - Music * busy_span_req_; - Music * stop_req_; + Music * rest_ev_; Link_array text_events_; int start_measure_; - Moment start_moment_; Rational last_main_moment_; - + Moment stop_moment_; + bool bar_seen_; + Spanner *last_rest_; Spanner *mmrest_; - Link_array numbers_; + Link_array numbers_; Link_array last_numbers_; - Spanner *last_rest_; }; Multi_measure_rest_engraver::Multi_measure_rest_engraver () @@ -55,7 +53,7 @@ Multi_measure_rest_engraver::Multi_measure_rest_engraver () start_measure_ = 0; mmrest_ = 0; last_rest_ =0; - new_req_ = busy_span_req_ = stop_req_ =0; + rest_ev_ = 0; } bool @@ -63,15 +61,9 @@ Multi_measure_rest_engraver::try_music (Music* req) { if (req->is_mus_type ("multi-measure-rest-event")) { - Direction d = to_dir (req->get_mus_property ("span-direction")); - if (d == STOP) - { - stop_req_ = req; - } - else if (d == START&& !new_req_) - { - new_req_ = req; - } + rest_ev_ = req; + stop_moment_ = now_mom () + rest_ev_->get_length (); + return true; } else if (req->is_mus_type ("multi-measure-text-event")) @@ -85,26 +77,7 @@ Multi_measure_rest_engraver::try_music (Music* req) void Multi_measure_rest_engraver::process_music () { - - if (new_req_ && stop_req_) - stop_req_ = 0; - - if (new_req_) - start_moment_ = now_mom (); - - if (stop_req_) - { - busy_span_req_ =0; - stop_req_ = 0; - } - - if (new_req_) - { - busy_span_req_ = new_req_; - new_req_ =0; - } - - if (busy_span_req_ && !mmrest_) + if (rest_ev_ && !mmrest_) { mmrest_ = new Spanner (get_property ("MultiMeasureRest")); @@ -148,7 +121,7 @@ Multi_measure_rest_engraver::process_music () Spanner *sp = new Spanner (get_property ("MultiMeasureRestNumber")); numbers_.push (sp); - announce_grob (sp, busy_span_req_->self_scm()); + announce_grob (sp, rest_ev_->self_scm()); } for (int i =0 ; i < numbers_.size(); i++) @@ -157,7 +130,7 @@ Multi_measure_rest_engraver::process_music () numbers_[i]->set_parent (mmrest_, Y_AXIS); } - announce_grob (mmrest_, busy_span_req_->self_scm()); + announce_grob (mmrest_, rest_ev_->self_scm()); start_measure_ = gh_scm2int (get_property ("currentBarNumber")); } @@ -199,7 +172,7 @@ Multi_measure_rest_engraver::stop_translation_timestep () SCM smp = get_property ("measurePosition"); Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); - if (mmrest_ && (now_mom () >= start_moment_) + if (mmrest_ && !mp.to_bool () && mmrest_->get_bound (LEFT) && mmrest_->get_bound (RIGHT)) { @@ -234,18 +207,17 @@ Multi_measure_rest_engraver::stop_translation_timestep () last_numbers_.clear(); } - if (new_req_) - { - busy_span_req_ = new_req_; - new_req_ =0; - } - text_events_.clear (); } void Multi_measure_rest_engraver::start_translation_timestep () { + if (now_mom ().main_part_ >= stop_moment_.main_part_) + { + rest_ev_ = 0; + } + bar_seen_ = false; SCM smp = get_property ("measurePosition"); diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index acdceff211..58ff4e0121 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -261,7 +261,7 @@ e.g. @code{\\mark \"A\"}.") (description . "Rests that may be compressed into Multi rests. Syntax @code{R2.*4} for 4 measures in 3/4 time. Note the capital R.") (internal-class-name . "Event") - (types . (general-music event span-event multi-measure-rest-event)) + (types . (general-music event rhythmic-event multi-measure-rest-event)) )) (MultiMeasureTextEvent diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 74f42bc1f0..c933f8592e 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -296,24 +296,18 @@ i.e. this is not an override" (let* ( (start (make-music-by-name 'MultiMeasureRestEvent)) - (stop (make-music-by-name 'MultiMeasureRestEvent)) - (skip ( make-music-by-name 'SkipEvent)) (ch (make-music-by-name 'BarCheck)) (ch2 (make-music-by-name 'BarCheck)) - (seq (make-music-by-name 'MultiMeasureRestMusicGroup)) + (seq (make-music-by-name 'MultiMeasureRestMusicGroup)) ) (map (lambda (x) (ly:set-mus-property! x 'origin location)) - (list start stop skip ch ch2 seq)) - (ly:set-mus-property! start 'span-direction START) - (ly:set-mus-property! stop 'span-direction STOP) - (ly:set-mus-property! skip 'duration duration) + (list start ch ch2 seq)) + (ly:set-mus-property! start 'duration duration) (ly:set-mus-property! seq 'elements (list ch (make-event-chord (list start)) - (make-event-chord (list skip)) - (make-event-chord (list stop)) ch2 )) -- 2.39.5