X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Frepeat-tie-engraver.cc;h=aebed3fdbab2db162214d758a497a80ab105a51e;hb=8e2eaf4959bec63a1128a444591a540f4f1e2937;hp=4bce2113105646b76ad3fb667c021a8c065928cd;hpb=9f3572d98bb948c9689cd1f75401a029451fa001;p=lilypond.git diff --git a/lily/repeat-tie-engraver.cc b/lily/repeat-tie-engraver.cc index 4bce211310..aebed3fdba 100644 --- a/lily/repeat-tie-engraver.cc +++ b/lily/repeat-tie-engraver.cc @@ -1,34 +1,46 @@ /* - repeat-engraver.cc -- implement Repeat_tie_engraver + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2015 Han-Wen Nienhuys - (c) 2005--2006 Han-Wen Nienhuys -*/ + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ #include "engraver.hh" #include "item.hh" #include "pointer-group-interface.hh" +#include "stream-event.hh" #include "translator.icc" class Repeat_tie_engraver : public Engraver { - Music *event_; + Stream_event *event_; Grob *semi_tie_column_; - vector semi_ties_; - - void stop_translation_timestep (); - DECLARE_ACKNOWLEDGER (note_head); - - virtual bool try_music (Music *); + vector semi_ties_; + + void stop_translation_timestep (); + void acknowledge_note_head (Grob_info); + void listen_repeat_tie (Stream_event *); + public: TRANSLATOR_DECLARATIONS (Repeat_tie_engraver); }; -Repeat_tie_engraver::Repeat_tie_engraver () +Repeat_tie_engraver::Repeat_tie_engraver (Context *c) + : Engraver (c) { event_ = 0; semi_tie_column_ = 0; @@ -42,11 +54,10 @@ Repeat_tie_engraver::stop_translation_timestep () semi_ties_.clear (); } -bool -Repeat_tie_engraver::try_music (Music *m) +void +Repeat_tie_engraver::listen_repeat_tie (Stream_event *ev) { - event_ = m; - return true; + ASSIGN_EVENT_ONCE (event_, ev); } void @@ -57,28 +68,44 @@ Repeat_tie_engraver::acknowledge_note_head (Grob_info inf) if (!semi_tie_column_) { - semi_tie_column_ = make_item ("RepeatTieColumn", event_->self_scm ()); + semi_tie_column_ = make_item ("RepeatTieColumn", SCM_EOL); } - - Grob *semi_tie = make_item ("RepeatTie", event_->self_scm ()); + + SCM cause = event_->self_scm (); + Grob *semi_tie = make_item ("RepeatTie", cause); semi_tie->set_object ("note-head", inf.grob ()->self_scm ()); - + Pointer_group_interface::add_grob (semi_tie_column_, ly_symbol2scm ("ties"), - semi_tie); + semi_tie); semi_tie->set_parent (semi_tie_column_, Y_AXIS); semi_ties_.push_back (semi_tie); + + if (is_direction (unsmob (cause)->get_property ("direction"))) + { + Direction d = to_dir (unsmob (cause)->get_property ("direction")); + semi_tie->set_property ("direction", scm_from_int (d)); + } + +} + +void +Repeat_tie_engraver::boot () +{ + ADD_LISTENER (Repeat_tie_engraver, repeat_tie); + ADD_ACKNOWLEDGER (Repeat_tie_engraver, note_head); } +ADD_TRANSLATOR (Repeat_tie_engraver, + /* doc */ + "Create repeat ties.", + /* create */ + "RepeatTie " + "RepeatTieColumn ", -ADD_ACKNOWLEDGER (Repeat_tie_engraver, note_head); -ADD_TRANSLATOR (Repeat_tie_engraver, - /* doc */ "Create Laissez vibrer items.", - - /* create */ - "RepeatTie " - "RepeatTieColumn ", + /* read */ + "", - /* accept */ "repeat-tie-event", - /* read */ "", - /* write */ ""); + /* write */ + "" + );