2 This file is part of LilyPond, the GNU music typesetter.
4 Copyright (C) 2005--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 LilyPond is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 LilyPond is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
22 #include "engraver.hh"
24 #include "pointer-group-interface.hh"
25 #include "stream-event.hh"
27 #include "translator.icc"
29 class Repeat_tie_engraver
: public Engraver
32 Grob
*semi_tie_column_
;
33 vector
<Grob
*> semi_ties_
;
35 void stop_translation_timestep ();
36 DECLARE_ACKNOWLEDGER (note_head
);
37 DECLARE_TRANSLATOR_LISTENER (repeat_tie
);
40 TRANSLATOR_DECLARATIONS (Repeat_tie_engraver
);
43 Repeat_tie_engraver::Repeat_tie_engraver ()
50 Repeat_tie_engraver::stop_translation_timestep ()
57 IMPLEMENT_TRANSLATOR_LISTENER (Repeat_tie_engraver
, repeat_tie
);
59 Repeat_tie_engraver::listen_repeat_tie (Stream_event
*ev
)
61 ASSIGN_EVENT_ONCE (event_
, ev
);
65 Repeat_tie_engraver::acknowledge_note_head (Grob_info inf
)
70 if (!semi_tie_column_
)
72 semi_tie_column_
= make_item ("RepeatTieColumn", event_
->self_scm ());
75 SCM cause
= event_
->self_scm ();
76 Grob
*semi_tie
= make_item ("RepeatTie", cause
);
77 semi_tie
->set_object ("note-head", inf
.grob ()->self_scm ());
79 Pointer_group_interface::add_grob (semi_tie_column_
, ly_symbol2scm ("ties"),
81 semi_tie
->set_parent (semi_tie_column_
, Y_AXIS
);
82 semi_ties_
.push_back (semi_tie
);
85 if (is_direction (unsmob_stream_event (cause
)->get_property ("direction")))
87 Direction d
= to_dir (unsmob_stream_event (cause
)->get_property ("direction"));
88 semi_tie
->set_property ("direction", scm_from_int (d
));
93 ADD_ACKNOWLEDGER (Repeat_tie_engraver
, note_head
);
94 ADD_TRANSLATOR (Repeat_tie_engraver
,
96 "Create repeat ties.",