]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/laissez-vibrer-engraver.cc
Web-ja: update introduction
[lilypond.git] / lily / laissez-vibrer-engraver.cc
index f707964eb77970613deddc46a4014c2b36387e6d..2d2e2dd2e87ee0e06ae9aaa93e4072e4396d4e3f 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2005--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 2005--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
 
   LilyPond is free software: you can redistribute it and/or modify
@@ -32,14 +32,15 @@ class Laissez_vibrer_engraver : public Engraver
   vector<Grob *> 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<Stream_event> (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<Stream_event> (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<Stream_event> (cause)->get_property ("direction")))
     {
-      Direction d = to_dir (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));
     }
 
@@ -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.",