[Top][All Lists]
[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 */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: Better alignment of MetronomeMark to MultiMeasureRest (issue 6972044),
mtsolo <=