]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/multi-measure-rest-engraver.cc: use a single
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 24 Jan 2004 01:05:34 +0000 (01:05 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 24 Jan 2004 01:05:34 +0000 (01:05 +0000)
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
input/regression/multi-measure-rest-multi-staff-center.ly
lily/multi-measure-rest-engraver.cc
scm/define-music-types.scm
scm/music-functions.scm

index 2d8e13a48d35c550fdaeb24333498973841cfdd9..838936fdf1201baf9cec9a883401e4f4bb96063d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,13 @@
 2004-01-24  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+       * 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   <hanwen@xs4all.nl>
 
index 5ed082757b06d2823d6b9d191cc31160b59a0500..93ee2c4d2d00e8729435020c51e8a4aa95b71bb0 100644 (file)
@@ -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 } 
 
     >>
 
index 8099c3a51744e3d24cc698722834e05515ff3c3a..644c93d3ef804b3aefdeb78972d7e0324ddbb017 100644 (file)
@@ -32,21 +32,19 @@ protected:
   virtual void finalize ();
 
 private:
-  Music * new_req_;
-  Music * busy_span_req_;
-  Music * stop_req_;
+  Music * rest_ev_;
   Link_array<Music> 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<Spanner> numbers_;
 
+  Link_array<Spanner> numbers_;
   Link_array<Spanner> 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");
index acdceff21164c5add15a40c9478969e02984dc19..58ff4e01217fc700acee7782783f64941bf324f0 100644 (file)
@@ -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
index 74f42bc1f061e30c65870a049c5ba7207322a64c..c933f8592e3f143b65a23bb96c44b986f0cc9a42 100644 (file)
@@ -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
       ))