Moment end_moment_;
SCM tie_definition_;
Stream_event *tie_stream_event_;
- Music *tie_event_;
+ Stream_event *tie_event_;
Head_event_tuple ()
{
void
Tie_engraver::listen_tie (Stream_event *ev)
{
- event_ = ev;
+ ASSIGN_EVENT_ONCE (event_, ev);
}
void
Tie_engraver::process_music ()
{
- for (vsize i = 0; i < heads_to_tie_.size (); i++)
- if (heads_to_tie_[i].tie_event_
- || heads_to_tie_[i].tie_stream_event_)
- {
- context ()->set_property ("tieMelismaBusy", SCM_BOOL_T);
- break;
- }
+ bool busy = event_;
+ for (vsize i = 0; !busy && i < heads_to_tie_.size (); i++)
+ busy |= (heads_to_tie_[i].tie_event_
+ || heads_to_tie_[i].tie_stream_event_);
+
+ if (busy)
+ context ()->set_property ("tieMelismaBusy", SCM_BOOL_T);
}
void
tie_column_ = 0;
}
- if (!wait)
- heads_to_tie_.clear ();
+ vector<Head_event_tuple> new_heads_to_tie;
for (vsize i = 0; i < now_heads_.size (); i++)
{
SCM left_articulations = left_ev->get_property ("articulations");
- Music *tie_event = 0;
+ Stream_event *tie_event = 0;
Stream_event *tie_stream_event = event_;
for (SCM s = left_articulations;
!tie_event && !tie_stream_event && scm_is_pair (s);
s = scm_cdr (s))
{
- Music *m = unsmob_music (scm_car (s));
- if (!m)
+ Stream_event *ev = unsmob_stream_event (scm_car (s));
+ if (!ev)
continue;
- if (m->is_mus_type ("tie-event"))
- tie_event = m;
+ if (ev->in_event_class ("tie-event"))
+ tie_event = ev;
}
if (left_ev && (tie_event || tie_stream_event))
}
event_tup.end_moment_ = end;
- heads_to_tie_.push_back (event_tup);
+ new_heads_to_tie.push_back (event_tup);
}
}
+ if (!wait && new_heads_to_tie.size ())
+ heads_to_tie_.clear ();
+
+ // hmmm, how to do with copy() ?
+ for (vsize i = 0; i < new_heads_to_tie.size (); i++)
+ heads_to_tie_.push_back (new_heads_to_tie[i]);
+
event_ = 0;
now_heads_.clear ();
}
/* create */
"Tie "
"TieColumn ",
-
- /* accept */ "tie-event",
/* read */ "tieWaitForNote",
/* write */ "tieMelismaBusy");