Reviewers: ,
Message:
please review
Description:
Let repeatTie work inside of event-chord
The previous coding of repeat-tie-engraver.cc is replaced by the
renamed coding of the laissez-vibrer-engraver.
Please review this at https://codereview.appspot.com/335910043/
Affected files (+37, -21 lines):
M lily/repeat-tie-engraver.cc
Index: lily/repeat-tie-engraver.cc
diff --git a/lily/repeat-tie-engraver.cc b/lily/repeat-tie-engraver.cc
index
aebed3fdbab2db162214d758a497a80ab105a51e..8fbcf6958562aa68887db4c41f02494a2be4350c
100644
--- a/lily/repeat-tie-engraver.cc
+++ b/lily/repeat-tie-engraver.cc
@@ -28,13 +28,13 @@
class Repeat_tie_engraver : public Engraver
{
Stream_event *event_;
- Grob *semi_tie_column_;
- vector<Grob *> semi_ties_;
+ Grob *rt_column_;
+ vector<Grob *> rt_ties_;
void stop_translation_timestep ();
void acknowledge_note_head (Grob_info);
+protected:
void listen_repeat_tie (Stream_event *);
-
public:
TRANSLATOR_DECLARATIONS (Repeat_tie_engraver);
};
@@ -43,15 +43,15 @@ Repeat_tie_engraver::Repeat_tie_engraver (Context *c)
: Engraver (c)
{
event_ = 0;
- semi_tie_column_ = 0;
+ rt_column_ = 0;
}
void
Repeat_tie_engraver::stop_translation_timestep ()
{
event_ = 0;
- semi_tie_column_ = 0;
- semi_ties_.clear ();
+ rt_column_ = 0;
+ rt_ties_.clear ();
}
void
@@ -63,29 +63,45 @@ Repeat_tie_engraver::listen_repeat_tie (Stream_event
*ev)
void
Repeat_tie_engraver::acknowledge_note_head (Grob_info inf)
{
- if (!event_)
- return;
-
- if (!semi_tie_column_)
+ /* use the heard event_ for all note heads, or an individual event for
just
+ * a single note head (attached as an articulation inside a chord) */
+ Stream_event *tie_ev = event_;
+ Grob *head = inf.grob ();
+ Stream_event *note_ev = unsmob<Stream_event> (head->get_property
("cause"));
+ if (!tie_ev && note_ev && note_ev->in_event_class ("note-event"))
{
- semi_tie_column_ = make_item ("RepeatTieColumn", SCM_EOL);
+ SCM articulations = note_ev->get_property ("articulations");
+ for (SCM s = articulations; !tie_ev && scm_is_pair (s); s = scm_cdr
(s))
+ {
+ Stream_event *ev = unsmob<Stream_event> (scm_car (s));
+ if (ev && ev->in_event_class ("repeat-tie-event"))
+ tie_ev = ev;
+ }
}
- SCM cause = event_->self_scm ();
- Grob *semi_tie = make_item ("RepeatTie", cause);
- semi_tie->set_object ("note-head", inf.grob ()->self_scm ());
+ if (!tie_ev)
+ return;
+
+ SCM cause = tie_ev->self_scm ();
+
+ if (!rt_column_)
+ rt_column_ = make_item ("RepeatTieColumn", cause);
- Pointer_group_interface::add_grob (semi_tie_column_, ly_symbol2scm
("ties"),
- semi_tie);
- semi_tie->set_parent (semi_tie_column_, Y_AXIS);
- semi_ties_.push_back (semi_tie);
+ Grob *rt_tie = make_item ("RepeatTie", cause);
+ rt_tie->set_object ("note-head", head->self_scm ());
+
+ Pointer_group_interface::add_grob (rt_column_, ly_symbol2scm ("ties"),
+ rt_tie);
if (is_direction (unsmob<Stream_event> (cause)->get_property
("direction")))
{
Direction d = to_dir (unsmob<Stream_event> (cause)->get_property
("direction"));
- semi_tie->set_property ("direction", scm_from_int (d));
+ rt_tie->set_property ("direction", scm_from_int (d));
}
+ rt_tie->set_parent (rt_column_, Y_AXIS);
+
+ rt_ties_.push_back (rt_tie);
}
void
@@ -97,7 +113,7 @@ Repeat_tie_engraver::boot ()
ADD_TRANSLATOR (Repeat_tie_engraver,
/* doc */
- "Create repeat ties.",
+ "Create repeat tie items.",
/* create */
"RepeatTie "
@@ -108,4 +124,4 @@ ADD_TRANSLATOR (Repeat_tie_engraver,
/* write */
""
- );
+ );
\ No newline at end of file
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel