]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/chord-name-engraver.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / chord-name-engraver.cc
index 20752ae2f7f7b4c368af7120c2c323577b1281e7..963c3033f22e67ecaf6b0a0c46ca73dd45cc2d63 100644 (file)
@@ -6,19 +6,17 @@
   (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
-#include "chord-name.hh"
-#include "context.hh"
-#include "dimensions.hh"
 #include "engraver.hh"
+#include "chord-name.hh"
+#include "output-def.hh"
 #include "font-interface.hh"
-#include "item.hh"
 #include "output-def.hh"
-#include "pitch.hh"
+#include "dimensions.hh"
+#include "item.hh"
 #include "protected-scm.hh"
-#include "stream-event.hh"
+#include "context.hh"
 #include "warn.hh"
-
-#include "translator.icc"
+#include "pitch.hh"
 
 class Chord_name_engraver : public Engraver
 {
@@ -26,12 +24,14 @@ class Chord_name_engraver : public Engraver
 protected:
   void stop_translation_timestep ();
   void process_music ();
+  virtual bool try_music (Music *);
   virtual void finalize ();
   virtual void derived_mark () const;
-  DECLARE_TRANSLATOR_LISTENER (note);
 private:
+  void add_note (Music *);
+
   Item *chord_name_;
-  vector<Stream_event*> notes_;
+  vector<Music*> notes_;
 
   SCM last_chord_;
 };
@@ -53,6 +53,12 @@ Chord_name_engraver::Chord_name_engraver ()
   last_chord_ = SCM_EOL;
 }
 
+void
+Chord_name_engraver::add_note (Music *n)
+{
+  notes_.push_back (n);
+}
+
 void
 Chord_name_engraver::process_music ()
 {
@@ -63,10 +69,10 @@ Chord_name_engraver::process_music ()
   SCM inversion = SCM_EOL;
   SCM pitches = SCM_EOL;
 
-  Stream_event *inversion_event = 0;
+  Music *inversion_event = 0;
   for (vsize i = 0; i < notes_.size (); i++)
     {
-      Stream_event *n = notes_[i];
+      Music *n = notes_[i];
       SCM p = n->get_property ("pitch");
       if (!unsmob_pitch (p))
        continue;
@@ -119,11 +125,18 @@ Chord_name_engraver::process_music ()
   last_chord_ = chord_as_scm;
 }
 
-IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, note);
-void
-Chord_name_engraver::listen_note (Stream_event *ev)
+bool
+Chord_name_engraver::try_music (Music *m)
 {
-  notes_.push_back (ev);
+  /*
+    hmm. Should check?
+  */
+  if (m->is_mus_type ("note-event"))
+    {
+      add_note (m);
+      return true;
+    }
+  return false;
 }
 
 void
@@ -137,6 +150,8 @@ Chord_name_engraver::stop_translation_timestep ()
   The READs description is not strictly accurate:
   which properties are read depend on the chord naming function active.
 */
+#include "translator.icc"
+
 ADD_TRANSLATOR (Chord_name_engraver,
                /* doc */ "Catch note-events "
                "and generate the appropriate chordname.",