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
}
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 ()
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);
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)));
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));
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")))
&& !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;
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);
/* 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_);
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 ());
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.
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);
}
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);
}
return 0;
}
+
Moment
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