]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/grace-engraver.cc
Release: bump Welcome versions.
[lilypond.git] / lily / grace-engraver.cc
index 4249a922a4addc0988973c757bf72d9d144048d7..59550ba8326c17c9c2bd5bb74360020ccd40573f 100644 (file)
@@ -38,17 +38,17 @@ protected:
   virtual void finalize ();
 
   TRANSLATOR_DECLARATIONS (Grace_engraver);
-  DECLARE_LISTENER (grace_change);
+  void grace_change (SCM);
 };
 
-Grace_engraver::Grace_engraver ()
+Grace_engraver::Grace_engraver (Context *c)
+  : Engraver (c)
 {
   grace_settings_ = SCM_EOL;
   last_moment_ = Moment (Rational (-1, 1));
 }
 
 // The iterator should usually come before process_music
-IMPLEMENT_LISTENER (Grace_engraver, grace_change);
 void
 Grace_engraver::grace_change (SCM)
 {
@@ -101,7 +101,7 @@ Grace_engraver::consider_change_grace_settings ()
           SCM grob = scm_cadr (elt);
           SCM cell = scm_cddr (elt);
 
-          Grob_property_info (Context::unsmob (context), grob).matched_pop (cell);
+          Grob_property_info (unsmob<Context> (context), grob).matched_pop (cell);
         }
       grace_settings_ = SCM_EOL;
     }
@@ -121,10 +121,7 @@ Grace_engraver::consider_change_grace_settings ()
           if (!scm_is_pair (sym))
             sym = scm_list_1 (sym);
 
-          Context *c = context ();
-          while (c && !c->is_alias (context_name))
-            c = c->get_parent_context ();
-
+          Context *c = find_context_above (context (), context_name);
           if (c)
             {
               SCM cell = Grob_property_info (c, grob).push (sym, val);
@@ -139,7 +136,7 @@ Grace_engraver::consider_change_grace_settings ()
   if (last_moment_ == Rational (-1))
     {
       Dispatcher *d = context ()->event_source ();
-      d->add_listener (GET_LISTENER (grace_change), ly_symbol2scm ("GraceChange"));
+      d->add_listener (GET_LISTENER (Grace_engraver, grace_change), ly_symbol2scm ("GraceChange"));
     }
   last_moment_ = now;
 }
@@ -150,7 +147,7 @@ Grace_engraver::finalize ()
   if (last_moment_ != Rational (-1))
     {
       Dispatcher *d = context ()->event_source ();
-      d->remove_listener (GET_LISTENER (grace_change), ly_symbol2scm ("GraceChange"));
+      d->remove_listener (GET_LISTENER (Grace_engraver, grace_change), ly_symbol2scm ("GraceChange"));
     }
 }
 
@@ -161,6 +158,12 @@ Grace_engraver::derived_mark () const
   Engraver::derived_mark ();
 }
 
+void
+Grace_engraver::boot ()
+{
+
+}
+
 ADD_TRANSLATOR (Grace_engraver,
                 /* doc */
                 "Set font size and other properties for grace notes.",