]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/key-engraver.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / key-engraver.cc
index f9362832339230217a89a107459c3d6967eb64ab..b0a87988a4809908419b5d4906a555cc5aa7ce53 100644 (file)
@@ -6,15 +6,14 @@
   (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
+#include "item.hh"
 #include "bar-line.hh"
-#include "clef.hh"
+#include "staff-symbol-referencer.hh"
 #include "context.hh"
 #include "engraver.hh"
-#include "item.hh"
-#include "pitch.hh"
 #include "protected-scm.hh"
-#include "staff-symbol-referencer.hh"
-#include "stream-event.hh"
+#include "clef.hh"
+#include "pitch.hh"
 
 #include "translator.icc"
 
@@ -28,9 +27,9 @@
 class Key_engraver : public Engraver
 {
   void create_key (bool);
-  void read_event (Stream_event const *r);
+  void read_event (Music const *r);
 
-  Stream_event *key_event_;
+  Music *key_event_;
   Item *item_;
   Item *cancellation_;
 public:
@@ -39,10 +38,10 @@ public:
 protected:
   virtual void initialize ();
   virtual void finalize ();
+  virtual bool try_music (Music *event);
   void stop_translation_timestep ();
   void process_music ();
 
-  DECLARE_TRANSLATOR_LISTENER (key_change);
   DECLARE_ACKNOWLEDGER (clef);
   DECLARE_ACKNOWLEDGER (bar_line);
 };
@@ -112,13 +111,20 @@ Key_engraver::create_key (bool is_default)
     }
 }
 
-IMPLEMENT_TRANSLATOR_LISTENER (Key_engraver, key_change);
-void
-Key_engraver::listen_key_change (Stream_event *ev)
+bool
+Key_engraver::try_music (Music *event)
 {
-  /* do this only once, just to be on the safe side.  */
-  if (ASSIGN_EVENT_ONCE (key_event_, ev))
-    read_event (key_event_);
+  if (event->is_mus_type ("key-change-event"))
+    {
+      /* do this only once, just to be on the safe side.  */
+      if (!key_event_)
+       {
+         key_event_ = event;
+         read_event (key_event_);
+       }
+      return true;
+    }
+  return false;
 }
 
 void
@@ -156,7 +162,7 @@ Key_engraver::stop_translation_timestep ()
 }
 
 void
-Key_engraver::read_event (Stream_event const *r)
+Key_engraver::read_event (Music const *r)
 {
   SCM p = r->get_property ("pitch-alist");
   if (!scm_is_pair (p))