lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Better alignment of MetronomeMark to MultiMeasureRest (issue 6972044


From: mtsolo
Subject: Re: Better alignment of MetronomeMark to MultiMeasureRest (issue 6972044)
Date: Thu, 20 Dec 2012 11:53:17 +0000

Reviewers: Keith,

Message:
You're right...it was mostly out of laziness and desperation that I did
the quick fix...it worked for a piece I was typesetting.  I have a long
plane ride on the 28th to fix this correctly.


https://codereview.appspot.com/6972044/diff/1/lily/metronome-engraver.cc
File lily/metronome-engraver.cc (right):

https://codereview.appspot.com/6972044/diff/1/lily/metronome-engraver.cc#newcode134
lily/metronome-engraver.cc:134: has_note_column_ = true;
On 2012/12/20 02:40:11, Keith wrote:
Why not just
\override Score.MetronomeMark #'non-break-align-symbols =
#'(note-column-interface   multi-measure-rest-interface)

Good call...will do.

Description:
Better alignment of MetronomeMark to MultiMeasureRest

Please review this at https://codereview.appspot.com/6972044/

Affected files:
  M lily/break-alignment-interface.cc
  M lily/metronome-engraver.cc


Index: lily/break-alignment-interface.cc
diff --git a/lily/break-alignment-interface.cc b/lily/break-alignment-interface.cc index 242e39eacc7c35692d113ef7ea97d946f0a8da97..4a3ac4966213054b90f292cdff61c4e5f5c5a370 100644
--- a/lily/break-alignment-interface.cc
+++ b/lily/break-alignment-interface.cc
@@ -265,7 +265,15 @@ Break_alignable_interface::self_align_callback (SCM grob)
   Grob *me = unsmob_grob (grob);
   Item *alignment = dynamic_cast<Item *> (me->get_parent (X_AXIS));
   if (!Break_alignment_interface::has_interface (alignment))
-    return scm_from_int (0);
+    {
+      // If we're aligning to a break aligned, then we
+ // give up and shift as to-the-right as possible of its break alignment.
+      // If there is none, we give up entirely.
+ if (Break_alignment_interface::has_interface (alignment->get_parent (X_AXIS))) + return scm_from_double (alignment->get_parent (X_AXIS)->extent (alignment->get_parent (X_AXIS), X_AXIS)[RIGHT]);
+      else
+        return scm_from_int (0);
+    }

   SCM symbol_list = me->get_property ("break-align-symbols");
vector<Grob *> elements = Break_alignment_interface::ordered_elements (alignment);
Index: lily/metronome-engraver.cc
diff --git a/lily/metronome-engraver.cc b/lily/metronome-engraver.cc
index b4cd2ce328b89707ac7497ed0cff6ca18a6ab1ec..84567b6575a275efcc3b70b5281d9223f0cf02a0 100644
--- a/lily/metronome-engraver.cc
+++ b/lily/metronome-engraver.cc
@@ -37,6 +37,8 @@ class Metronome_mark_engraver : public Engraver
   Item *text_;
   Grob *support_;
   Grob *bar_;
+  Grob *break_alignment_;
+  bool has_note_column_;
   Stream_event *tempo_ev_;

 public:
@@ -49,6 +51,7 @@ protected:
   DECLARE_ACKNOWLEDGER (break_aligned);
   DECLARE_ACKNOWLEDGER (break_alignment);
   DECLARE_ACKNOWLEDGER (grob);
+  DECLARE_ACKNOWLEDGER (note_column);

   DECLARE_TRANSLATOR_LISTENER (tempo_change);
 };
@@ -59,6 +62,8 @@ Metronome_mark_engraver::Metronome_mark_engraver ()
   support_ = 0;
   bar_ = 0;
   tempo_ev_ = 0;
+  break_alignment_ = 0;
+  has_note_column_ = false;
 }

 IMPLEMENT_TRANSLATOR_LISTENER (Metronome_mark_engraver, tempo_change);
@@ -106,6 +111,8 @@ Metronome_mark_engraver::acknowledge_break_alignment (Grob_info info)
       && support_
       && dynamic_cast<Item *> (g))
     text_->set_parent (g, X_AXIS);
+
+  break_alignment_ = g;
 }

 void
@@ -122,15 +129,22 @@ Metronome_mark_engraver::acknowledge_grob (Grob_info info)
 }

 void
+Metronome_mark_engraver::acknowledge_note_column (Grob_info /* info */)
+{
+  has_note_column_ = true;
+}
+
+void
 Metronome_mark_engraver::stop_translation_timestep ()
 {
   if (text_)
     {
       if (text_->get_parent (X_AXIS)
&& text_->get_parent (X_AXIS)->internal_has_interface (ly_symbol2scm ("multi-measure-rest-interface"))
-          && bar_)
+          && (bar_ || break_alignment_))
+ //text_->set_parent (break_alignment_ ? break_alignment_ : bar_, X_AXIS);
         text_->set_parent (bar_, X_AXIS);
-      else if (!support_)
+      if (!support_ && has_note_column_)
         {
           /*
             Gardner Read "Music Notation", p.278
@@ -150,7 +164,9 @@ Metronome_mark_engraver::stop_translation_timestep ()
       support_ = 0;
       bar_ = 0;
       tempo_ev_ = 0;
+      break_alignment_ = 0;
     }
+  has_note_column_ = false;
 }

 void
@@ -172,6 +188,7 @@ Metronome_mark_engraver::process_music ()
 ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_aligned);
 ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_alignment);
 ADD_ACKNOWLEDGER (Metronome_mark_engraver, grob);
+ADD_ACKNOWLEDGER (Metronome_mark_engraver, note_column);

 ADD_TRANSLATOR (Metronome_mark_engraver,
                 /* doc */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]