X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fkey-engraver.cc;h=b0a87988a4809908419b5d4906a555cc5aa7ce53;hb=9f3572d98bb948c9689cd1f75401a029451fa001;hp=f9362832339230217a89a107459c3d6967eb64ab;hpb=04265f11d1f21416ccebd2dcaa1d903dc781b36e;p=lilypond.git diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index f936283233..b0a87988a4 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -6,15 +6,14 @@ (c) 1997--2006 Han-Wen Nienhuys */ +#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))