X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flaissez-vibrer-engraver.cc;h=d25002b2bbb4e421d570117b8919ddd2788fdf24;hb=0746180cd992a6b849f765ce4bbd6225e581abb6;hp=d361298c56da773dd52cad01c7c32b6559a1698d;hpb=64313890b232c731d432e5b096f30bffc3f3756d;p=lilypond.git diff --git a/lily/laissez-vibrer-engraver.cc b/lily/laissez-vibrer-engraver.cc index d361298c56..d25002b2bb 100644 --- a/lily/laissez-vibrer-engraver.cc +++ b/lily/laissez-vibrer-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2005--2006 Han-Wen Nienhuys + (c) 2005--2008 Han-Wen Nienhuys */ @@ -11,20 +11,20 @@ #include "engraver.hh" #include "item.hh" #include "pointer-group-interface.hh" +#include "stream-event.hh" #include "translator.icc" class Laissez_vibrer_engraver : public Engraver { - - Music *event_; + Stream_event *event_; Grob *lv_column_; - Link_array lv_ties_; + vector lv_ties_; void stop_translation_timestep (); DECLARE_ACKNOWLEDGER (note_head); - - virtual bool try_music (Music *); +protected: + DECLARE_TRANSLATOR_LISTENER (laissez_vibrer); public: TRANSLATOR_DECLARATIONS (Laissez_vibrer_engraver); }; @@ -43,11 +43,11 @@ Laissez_vibrer_engraver::stop_translation_timestep () lv_ties_.clear (); } -bool -Laissez_vibrer_engraver::try_music (Music *m) +IMPLEMENT_TRANSLATOR_LISTENER (Laissez_vibrer_engraver, laissez_vibrer); +void +Laissez_vibrer_engraver::listen_laissez_vibrer (Stream_event *ev) { - event_ = m; - return true; + ASSIGN_EVENT_ONCE (event_, ev); } void @@ -60,27 +60,37 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf) { lv_column_ = make_item ("LaissezVibrerTieColumn", event_->self_scm ()); } - - Grob *lv_tie = make_item ("LaissezVibrerTie", event_->self_scm ()); + + SCM cause = event_->self_scm (); + Grob *lv_tie = make_item ("LaissezVibrerTie", cause); lv_tie->set_object ("note-head", inf.grob ()->self_scm ()); Pointer_group_interface::add_grob (lv_column_, ly_symbol2scm ("ties"), lv_tie); + + if (is_direction (unsmob_stream_event (cause)->get_property ("direction"))) + { + Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction")); + lv_tie->set_property ("direction", scm_from_int (d)); + } + lv_tie->set_parent (lv_column_, Y_AXIS); lv_ties_.push_back (lv_tie); } - - ADD_ACKNOWLEDGER (Laissez_vibrer_engraver, note_head); ADD_TRANSLATOR (Laissez_vibrer_engraver, - /* doc */ "Create Laissez vibrer items.", + /* doc */ + "Create laissez vibrer items.", /* create */ "LaissezVibrerTie " - "LaissezVibrerTieColumn", + "LaissezVibrerTieColumn ", + + /* read */ + "", - /* accept */ "laissez-vibrer-event", - /* read */ "", - /* write */ ""); + /* write */ + "" + );