]> git.donarmstrong.com Git - lilypond.git/commitdiff
add get_event_length() that takes grace timing into account.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 31 Jan 2007 21:31:03 +0000 (22:31 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 31 Jan 2007 21:31:03 +0000 (22:31 +0100)
13 files changed:
lily/auto-beam-engraver.cc
lily/bend-engraver.cc
lily/completion-note-heads-engraver.cc
lily/context.cc
lily/drum-note-performer.cc
lily/figured-bass-engraver.cc
lily/grob-pq-engraver.cc
lily/include/translator.hh
lily/multi-measure-rest-engraver.cc
lily/note-performer.cc
lily/slash-repeat-engraver.cc
lily/spacing-engraver.cc
lily/translator.cc

index 481625606fa2056cd78c7ec46d64f9a8668f2ac4..a98b05f48d953384474d5e5996fb023062b02eb1 100644 (file)
@@ -388,7 +388,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info)
                       durlog - 2);
   stems_->push_back (stem);
   last_add_mom_ = now;
-  extend_mom_ = max (extend_mom_, now) + get_event_length (ev);
+  extend_mom_ = max (extend_mom_, now) + get_event_length (ev, now);
 }
 
 void
index 4287084c1e5ccaa2ecaa63a4b8f2ea8b7cbf6762..4f243dfc7371bbcb7f5447ea7f5fadd3a4a955c4 100644 (file)
@@ -79,7 +79,8 @@ Bend_engraver::acknowledge_note_head (Grob_info info)
     }
 
   note_head_ = info.grob ();
-  stop_moment_ = now_mom () + get_event_length (info.event_cause ());
+  stop_moment_ = now_mom () + get_event_length (info.event_cause (),
+                                               now_mom ());
 }
 
 Bend_engraver::Bend_engraver ()
index cb4471528623ed66c9a7ce5ded3c4b708a533fc9..f514f7d37febd3c1e774216c3fa3f93ec9633826 100644 (file)
@@ -85,14 +85,8 @@ Completion_heads_engraver::listen_note (Stream_event *ev)
   note_events_.push_back (ev);
   
   is_first_ = true;
-  Moment musiclen = get_event_length (ev);
   Moment now = now_mom ();
-
-  if (now_mom ().grace_part_)
-    {
-      musiclen.grace_part_ = musiclen.main_part_;
-      musiclen.main_part_ = Rational (0, 1);
-    }
+  Moment musiclen = get_event_length (ev, now);
 
   note_end_mom_ = max (note_end_mom_, (now + musiclen));
   do_nothing_until_ = Rational (0, 0);
index 7e5ea8ae2ac0c83ee84e30de36f38f8d10590e34..da83c9a98c07dc7242d3e84ae32420fe0dd939bb 100644 (file)
@@ -710,7 +710,7 @@ melisma_busy (Context *tr)
   SCM melisma_properties = tr->get_property ("melismaBusyProperties");
   bool busy = false;
 
-  for (; scm_is_pair (melisma_properties);
+  for (; !busy && scm_is_pair (melisma_properties);
        melisma_properties = scm_cdr (melisma_properties))
     busy = busy || to_boolean (tr->internal_get_property (scm_car (melisma_properties)));
 
index a4187c187cfb83c1bb86d69e26724494be1b9bb5..bb55ac2ef6a417c2eae20c369aa19b965ae0409c 100644 (file)
@@ -64,13 +64,7 @@ Drum_note_performer::process_music ()
                 tie_event = ev;
             }
 
-         Moment len = get_event_length (n);
-         if (now_mom ().grace_part_)
-           {
-             len.grace_part_ = len.main_part_;
-             len.main_part_ = Rational (0);
-           }
-             
+         Moment len = get_event_length (n, now_mom ());
 
          Audio_note *p = new Audio_note (*pit, len,
                                           tie_event, Pitch (0, 0, 0));
index 29185bc2c847f1e907b63f4ef32d8b7f755e9e92..a73cdf6bd8b845eacf044368c1c9e7f175a08252 100644 (file)
@@ -156,7 +156,7 @@ void
 Figured_bass_engraver::listen_bass_figure (Stream_event *ev)
 {
   new_event_found_ = true;
-  Moment stop  = now_mom () + get_event_length (ev);
+  Moment stop  = now_mom () + get_event_length (ev, now_mom ());
   stop_moment_ = max (stop_moment_, stop);
 
   if (to_boolean (get_property ("useBassFigureExtenders")))
index 7cb4afab87900821d25ee4f39df5e28a8cec35ea..563e7218c08a60cb994b896757686e6bf4ac80be 100644 (file)
@@ -67,17 +67,11 @@ Grob_pq_engraver::acknowledge_grob (Grob_info gi)
       && !gi.grob ()->internal_has_interface (ly_symbol2scm ("multi-measure-interface")))
     {
       Moment n = now_mom ();
-      Moment l = get_event_length (ev);
+      Moment l = get_event_length (ev, n);
 
       if (!l.to_bool ())
        return;
 
-      if (n.grace_part_)
-       {
-         l.grace_part_ = l.main_part_;
-         l.main_part_ = 0;
-       }
-
       Moment end = n + l;
 
       Grob_pq_entry e;
index 6145cae05253a849438fc2e2c4a93e95505f7b5d..33fafaea0e11b3775e6511cc2dbec0f4285818e1 100644 (file)
@@ -141,6 +141,7 @@ protected:                  // should be private.
 void add_translator (Translator *trans);
 
 Translator *get_translator (SCM s);
+Moment get_event_length (Stream_event *s, Moment now);
 Moment get_event_length (Stream_event *s);
 DECLARE_UNSMOB (Translator, translator);
 
index ecb0d97a62246863ef4fd011c5096563f0a21799..c8ea549701b57a4537c7e4f387c632e278a05ca8 100644 (file)
@@ -69,7 +69,7 @@ Multi_measure_rest_engraver::listen_multi_measure_rest (Stream_event *ev)
   /* FIXME: Should use ASSIGN_EVENT_ONCE. Can't do that yet because of
      the kill-mm-rests hack in part-combine-iterator. */
   rest_ev_ = ev;
-  stop_moment_ = now_mom () + get_event_length (rest_ev_);
+  stop_moment_ = now_mom () + get_event_length (rest_ev_, now_mom ());
   /*
   if (ASSIGN_EVENT_ONCE (rest_ev_, ev))
     stop_moment_ = now_mom () + get_event_length (rest_ev_);
index d6554bbdc8520a4ded490bd6c26a24b9420c4422..776061f6c6f1690ec9fc38eac13624b3c85effe3 100644 (file)
@@ -67,12 +67,7 @@ Note_performer::process_music ()
                tie_event = ev;
            }
 
-         Moment len = get_event_length (n);
-         if (now_mom ().grace_part_)
-           {
-             len.grace_part_ = len.main_part_;
-             len.main_part_ = Rational (0);
-           }
+         Moment len = get_event_length (n, now_mom ());
          
          Audio_note *p = new Audio_note (*pitp, len, 
                                          tie_event, transposing.negated ());
index 7d71b677a193aa6f0e20581a495c54285cabc992..f772e876fb508016c733726449b74812b957c508 100644 (file)
@@ -50,7 +50,7 @@ Slash_repeat_engraver::listen_percent (Stream_event *ev)
   
   if (get_event_length (ev) < meas_length)
     ASSIGN_EVENT_ONCE (slash_, ev);
-
+  
   /*
     don't warn if nothing happens: this can happen if there are whole
     measure repeats.
index ad49a345b6de47eae4ed06cb6854e4003e899652..fae9a120c7b404d4511e27cb581d936b4d136724 100644 (file)
@@ -174,7 +174,7 @@ Spacing_engraver::add_starter_duration (Grob_info i)
       Stream_event *r = i.event_cause ();
       if (r && r->in_event_class ("rhythmic-event"))
        {
-         Moment len = get_event_length (r);
+         Moment len = get_event_length (r, now_);
          Rhythmic_tuple t (i, now_mom () + len);
          now_durations_.push_back (t);
        }
@@ -211,6 +211,7 @@ Spacing_engraver::stop_translation_timestep ()
       Stream_event *ev = playing_durations_[i].info_.event_cause ();
       if (ev)
        {
+         Moment now = now_mom ();
          Moment m = get_event_length (ev);
          shortest_playing = min (shortest_playing, m);
        }
index a6b4342de91ea43aaddfd07477f7b7c4f85bff1e..ae1dfbe7ff5158e4a755dd08047022b7044e80fe 100644 (file)
@@ -295,6 +295,7 @@ generic_get_acknowledger (SCM sym, vector<Acknowledge_information> const *ack_ar
   return 0;
 }
 
+
 Moment
 get_event_length (Stream_event *e)
 {
@@ -305,6 +306,19 @@ get_event_length (Stream_event *e)
     return Moment (0);
 }
 
+Moment
+get_event_length (Stream_event *e, Moment now)
+{
+  Moment len = get_event_length (e);
+  
+  if (now.grace_part_)
+    {
+      len.grace_part_ = len.main_part_;
+      len.main_part_ = Rational (0);
+    }
+  return len;
+}
+
 /*
   Helper, used through ASSIGN_EVENT_ONCE to throw warnings for
   simultaneous events. The helper is only useful in listen_* methods