]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/beam-engraver.cc
Merge branch 'master' of git://git.sv.gnu.org/lilypond
[lilypond.git] / lily / beam-engraver.cc
index fbd212efa116331d95144e0847fa19c116022616..53d123454777fd33d071200132ee8e2abb75861a 100644 (file)
@@ -102,9 +102,9 @@ Beam_engraver::listen_beam (Stream_event *ev)
   Direction d = to_dir (ev->get_property ("span-direction"));
 
   if (d == START && valid_start_point ())
-    start_ev_ = ev;
+    ASSIGN_EVENT_ONCE (start_ev_, ev);
   else if (d == STOP && valid_end_point ())
-    now_stop_ev_ = ev;
+    ASSIGN_EVENT_ONCE (now_stop_ev_, ev);
 }
 
 void
@@ -206,7 +206,8 @@ Beam_engraver::finalize ()
 void
 Beam_engraver::acknowledge_rest (Grob_info info)
 {
-  if (beam_)
+  if (beam_
+      && !scm_is_number (info.grob ()->get_property_data ("staff-position")))
     {
       chain_offset_callback (info.grob(),
                             Beam::rest_collision_callback_proc, Y_AXIS);
@@ -242,7 +243,7 @@ Beam_engraver::acknowledge_stem (Grob_info info)
   int durlog = unsmob_duration (ev->get_property ("duration"))->duration_log ();
   if (durlog <= 2)
     {
-      ev->origin ()->warning (_ ("stem doesn't fit in beam"));
+      ev->origin ()->warning (_ ("stem does not fit in beam"));
       prev_start_ev_->origin ()->warning (_ ("beam was started here"));
       /*
        don't return, since
@@ -269,7 +270,6 @@ ADD_TRANSLATOR (Beam_engraver,
                "printed with flags instead of beams.",
                
                /* create */ "Beam",
-               /* accept */ "beam-event",
 
                /* read */
                "beamMelismaBusy "
@@ -284,6 +284,8 @@ class Grace_beam_engraver : public Beam_engraver
 public:
   TRANSLATOR_DECLARATIONS (Grace_beam_engraver);
 
+  DECLARE_TRANSLATOR_LISTENER (beam);
+  
 protected:
   virtual bool valid_start_point ();
   virtual bool valid_end_point ();
@@ -307,6 +309,22 @@ Grace_beam_engraver::valid_end_point ()
   return beam_ && valid_start_point ();
 }
 
+/*
+  Ugh, C&P code.
+ */
+IMPLEMENT_TRANSLATOR_LISTENER (Grace_beam_engraver, beam);
+void
+Grace_beam_engraver::listen_beam (Stream_event *ev)
+{
+  Direction d = to_dir (ev->get_property ("span-direction"));
+
+  if (d == START && valid_start_point ())
+    start_ev_ = ev;
+  else if (d == STOP && valid_end_point ())
+    now_stop_ev_ = ev;
+}
+
+
 ADD_ACKNOWLEDGER (Grace_beam_engraver, stem);
 ADD_ACKNOWLEDGER (Grace_beam_engraver, rest);
 
@@ -319,7 +337,6 @@ ADD_TRANSLATOR (Grace_beam_engraver,
                " are at grace points in time. ",
                
                /* create */ "Beam",
-               /* accept */ "beam-event",
                /* read */
                "beamMelismaBusy "
                "beatLength "