]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/horizontal-bracket-engraver.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / horizontal-bracket-engraver.cc
index cfcd882a8eb0e512b3be9704e4943a425a7ebc34..5c553374a31a7fc378c2327259ba3643e060417f 100644 (file)
@@ -12,7 +12,6 @@
 #include "note-column.hh"
 #include "pointer-group-interface.hh"
 #include "side-position-interface.hh"
-#include "stream-event.hh"
 
 #include "translator.icc"
 
@@ -21,14 +20,14 @@ class Horizontal_bracket_engraver : public Engraver
 public:
   TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver);
   vector<Spanner*> bracket_stack_;
-  vector<Stream_event*> events_;
+  vector<Music*> events_;
   vsize pop_count_;
   vsize push_count_;
 
+  virtual bool try_music (Music *);
   void stop_translation_timestep ();
   void process_music ();
   DECLARE_ACKNOWLEDGER (note_column);
-  DECLARE_TRANSLATOR_LISTENER (note_grouping);
 };
 
 ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
@@ -45,26 +44,31 @@ Horizontal_bracket_engraver::Horizontal_bracket_engraver ()
   push_count_ = 0;
 }
 
-IMPLEMENT_TRANSLATOR_LISTENER (Horizontal_bracket_engraver, note_grouping);
-void
-Horizontal_bracket_engraver::listen_note_grouping (Stream_event *ev)
+bool
+Horizontal_bracket_engraver::try_music (Music *m)
 {
-  Direction d = to_dir (ev->get_property ("span-direction"));
-
-  if (d == STOP)
+  if (m->is_mus_type ("note-grouping-event"))
     {
-      pop_count_++;
-      if (pop_count_ > bracket_stack_.size ())
-       ev->origin ()->warning (_ ("don't have that many brackets"));
+      Direction d = to_dir (m->get_property ("span-direction"));
+
+      if (d == STOP)
+       {
+         pop_count_++;
+         if (pop_count_ > bracket_stack_.size ())
+           m->origin ()->warning (_ ("don't have that many brackets"));
+       }
+      else
+       {
+         push_count_++;
+         events_.push_back (m);
+       }
+
+      if (pop_count_ && push_count_)
+       m->origin ()->warning (_ ("conflicting note group events"));
+
+      return true;
     }
-  else
-    {
-      push_count_++;
-      events_.push_back (ev);
-    }
-
-  if (pop_count_ && push_count_)
-    ev->origin ()->warning (_ ("conflicting note group events"));
+  return false;
 }
 
 void