X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flaissez-vibrer-engraver.cc;h=2d2e2dd2e87ee0e06ae9aaa93e4072e4396d4e3f;hb=a6a51abfd0195a3cf7d6ea095cf69808852f21ce;hp=f707964eb77970613deddc46a4014c2b36387e6d;hpb=c39d188d28fdc84cef8cbaea7b8d6e2fb718c30f;p=lilypond.git diff --git a/lily/laissez-vibrer-engraver.cc b/lily/laissez-vibrer-engraver.cc index f707964eb7..2d2e2dd2e8 100644 --- a/lily/laissez-vibrer-engraver.cc +++ b/lily/laissez-vibrer-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2014 Han-Wen Nienhuys + Copyright (C) 2005--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify @@ -32,14 +32,15 @@ class Laissez_vibrer_engraver : public Engraver vector lv_ties_; void stop_translation_timestep (); - DECLARE_ACKNOWLEDGER (note_head); + void acknowledge_note_head (Grob_info); protected: - DECLARE_TRANSLATOR_LISTENER (laissez_vibrer); + void listen_laissez_vibrer (Stream_event *); public: TRANSLATOR_DECLARATIONS (Laissez_vibrer_engraver); }; -Laissez_vibrer_engraver::Laissez_vibrer_engraver () +Laissez_vibrer_engraver::Laissez_vibrer_engraver (Context *c) + : Engraver (c) { event_ = 0; lv_column_ = 0; @@ -53,7 +54,6 @@ Laissez_vibrer_engraver::stop_translation_timestep () lv_ties_.clear (); } -IMPLEMENT_TRANSLATOR_LISTENER (Laissez_vibrer_engraver, laissez_vibrer); void Laissez_vibrer_engraver::listen_laissez_vibrer (Stream_event *ev) { @@ -67,13 +67,13 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf) * 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")); + Stream_event *note_ev = unsmob (head->get_property ("cause")); if (!tie_ev && note_ev && note_ev->in_event_class ("note-event")) { 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)); + Stream_event *ev = unsmob (scm_car (s)); if (ev && ev->in_event_class ("laissez-vibrer-event")) tie_ev = ev; } @@ -93,9 +93,9 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf) Pointer_group_interface::add_grob (lv_column_, ly_symbol2scm ("ties"), lv_tie); - if (is_direction (unsmob_stream_event (cause)->get_property ("direction"))) + if (is_direction (unsmob (cause)->get_property ("direction"))) { - Direction d = to_dir (unsmob_stream_event (cause)->get_property ("direction")); + Direction d = to_dir (unsmob (cause)->get_property ("direction")); lv_tie->set_property ("direction", scm_from_int (d)); } @@ -104,7 +104,13 @@ Laissez_vibrer_engraver::acknowledge_note_head (Grob_info inf) lv_ties_.push_back (lv_tie); } -ADD_ACKNOWLEDGER (Laissez_vibrer_engraver, note_head); +void +Laissez_vibrer_engraver::boot () +{ + ADD_LISTENER (Laissez_vibrer_engraver, laissez_vibrer); + ADD_ACKNOWLEDGER (Laissez_vibrer_engraver, note_head); +} + ADD_TRANSLATOR (Laissez_vibrer_engraver, /* doc */ "Create laissez vibrer items.",