]> git.donarmstrong.com Git - lilypond.git/commitdiff
Align metronome mark also on MultiMeasureRest. Fixes #684.
authorJan Nieuwenhuizen <janneke@gnu.org>
Mon, 7 Jun 2010 21:48:26 +0000 (23:48 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 24 Aug 2010 13:24:25 +0000 (15:24 +0200)
Metronome marks no longer disappear on multi measure rests.

lily/metronome-engraver.cc
scm/define-grobs.scm

index a37a9475fb34e5329eb7e109d8ecaf0c13e760d1..a1024049d52ef3323349749f5d17d341d92187d5 100644 (file)
@@ -45,7 +45,8 @@ protected:
   SCM last_text_;
 
   DECLARE_ACKNOWLEDGER (break_aligned);
-  
+  DECLARE_ACKNOWLEDGER (grob);
+
 protected:
   virtual void derived_mark () const;
   void stop_translation_timestep ();
@@ -70,14 +71,31 @@ Metronome_mark_engraver::derived_mark () const
 }
 
 void
-Metronome_mark_engraver::acknowledge_break_aligned (Grob_info inf)
+Metronome_mark_engraver::acknowledge_break_aligned (Grob_info info)
 {
-  Grob *s = inf.grob ();
+  Grob *g = info.grob ();
   if (text_
-      && (s->get_property_data ("break-align-symbol")
+      && !support_
+      && (g->get_property_data ("break-align-symbol")
          == text_->get_property_data ("break-align-symbol")))
     {
-      support_ = s;
+      support_ = g;
+      text_->set_parent (g, X_AXIS);
+    }
+}
+
+void
+Metronome_mark_engraver::acknowledge_grob (Grob_info info)
+{
+  Grob *g = info.grob ();
+
+  if (text_
+      && !support_
+      && scm_member (g->get_property_data ("break-align-symbol"),
+                    text_->get_property_data ("break-align-symbols"))
+      != SCM_BOOL_F)
+    {
+      text_->set_parent (g, X_AXIS);
     }
 }
 
@@ -95,8 +113,10 @@ Metronome_mark_engraver::stop_translation_timestep ()
            first notational element of the measure if no time
            signature is present in that measure).
          */
-         Grob *mc = unsmob_grob (get_property ("currentMusicalColumn"));
-         text_->set_parent (mc, X_AXIS);
+         if (Grob *mc = unsmob_grob (get_property ("currentMusicalColumn")))
+           text_->set_parent (mc, X_AXIS);
+         else if (Grob *cc = unsmob_grob (get_property ("currentCommandColumn")))
+           text_->set_parent (cc, X_AXIS);
        }
       text_->set_object ("side-support-elements",
                         grob_list_to_grob_array (get_property ("stavesFound")));
@@ -138,6 +158,7 @@ Metronome_mark_engraver::process_music ()
 
 
 ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_aligned);
+ADD_ACKNOWLEDGER (Metronome_mark_engraver, grob);
 
 ADD_TRANSLATOR (Metronome_mark_engraver,
                /* doc */
index 8b9a1f1dc399699dfd3651dac5f010781b6fe6f5..39a2abd8f38a3c5716a0cda0ca86f6a1e154ac32 100644 (file)
     (MetronomeMark
      . (
        (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
+       (break-visibility . ,end-of-line-invisible)
        (direction . ,UP)
        (extra-spacing-width . (+inf.0 . -inf.0))
        (outside-staff-priority . 1000)
                          (list ly:self-alignment-interface::x-aligned-on-self)))))
        (self-alignment-X . -1)
        (break-align-symbol . time-signature)
-       (break-align-symbols . (time-signature))
+       (break-align-symbols . (time-signature multi-measure-rest))
        (meta . ((class . Item)
                 (interfaces . (font-interface
                                metronome-mark-interface
 
     (MultiMeasureRest
      . (
+       (break-align-symbol . multi-measure-rest)
        (expand-limit . 10)
        (hair-thickness . 2.0)
        (padding . 1)