Don't align on KeySignature unless explicitly requested via
'break-align-symbols and make order of 'break-align-symbols
significant.
* remove `key-signature' from 'break-align-symbols
* acknowledge break_alignment, and set this as X-parent
instead of break_aligned, but only if found break_aligned
is visible
* add regression test to test ordering
* tweak existing test to reflect change in default for
'break-align-symbols
--- /dev/null
+\version "2.13.33"
+
+\header {
+ texidoc = "Metronome marks respect symbol order in
+@code{break-align-symbols}.
+
+In this example, the default is changed to
+@code{'(time-signature key-signature)}: since @code{key-signature}
+is second in the list, the mark should only be aligned with the key
+signature if there is no time signature present, as in the second
+measure.
+"
+}
+
+\paper {
+ ragged-right = ##t
+}
+
+\relative c' {
+ \override Staff.KeySignature #'break-align-anchor-alignment = #LEFT
+ \override Score.MetronomeMark #'break-align-symbols = #'(time-signature key-signature)
+ \key c \minor
+ \tempo "Time"
+ c1
+ \key as \major
+ \tempo "Key"
+ c1
+}
-
- texidoc = "@code{\\tempo} are aligned with Tempo, Key or first musical
-element.
+\header {
+ texidoc = "@code{\\tempo} marks are aligned with the time signature
+or first musical element unless the first element is a multi-measure
+rest: in this case, the tempo mark is aligned with the bar line.
+By overriding @code{break-align-symbols} the default alignment can be
+changed, as shown by the final metronome mark in this snippet, aligned
+with a key signature.
+"
\layout {
line-width = 50\mm
}
\layout {
line-width = 50\mm
}
-\relative {
- \tempo "T-first" c1\mark \default \tempo "T-note" c \break
- \tempo "T-break" c \tempo "T-rest" R
- \break
- \time 8/8 \tempo "T-time" R
- \key as \major \tempo "T-key" R
+
+\relative c' {
+ \tempo "T-first"
+ c1
+ \mark \default
+ \tempo "T-note"
+ c1 \break
+ \tempo "T-break"
+ c1
+ \tempo "T-rest"
+ R1 \break
+ \time 8/8
+ \tempo "T-time"
+ R1
+ \override Score.MetronomeMark #'break-align-symbols = #'(key-signature)
+ \key as \major
+ \tempo "T-key"
+ R1
SCM last_text_;
DECLARE_ACKNOWLEDGER (break_aligned);
SCM last_text_;
DECLARE_ACKNOWLEDGER (break_aligned);
+ DECLARE_ACKNOWLEDGER (break_alignment);
DECLARE_ACKNOWLEDGER (grob);
protected:
DECLARE_ACKNOWLEDGER (grob);
protected:
else if (text_
&& !support_
&& safe_is_member (g->get_property ("break-align-symbol"),
else if (text_
&& !support_
&& safe_is_member (g->get_property ("break-align-symbol"),
- text_->get_property ("break-align-symbols")))
- {
- support_ = g;
- text_->set_parent (g, X_AXIS);
- }
+ text_->get_property ("break-align-symbols"))
+ && Item::break_visible (g))
+ support_ = g;
+}
+
+void
+Metronome_mark_engraver::acknowledge_break_alignment (Grob_info info)
+{
+ Grob *g = info.grob ();
+
+ if (text_
+ && support_
+ && dynamic_cast<Item *> (g))
+ text_->set_parent (g, X_AXIS);
ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_aligned);
ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_aligned);
+ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_alignment);
ADD_ACKNOWLEDGER (Metronome_mark_engraver, grob);
ADD_TRANSLATOR (Metronome_mark_engraver,
ADD_ACKNOWLEDGER (Metronome_mark_engraver, grob);
ADD_TRANSLATOR (Metronome_mark_engraver,
,(ly:make-simple-closure
(list ly:self-alignment-interface::x-aligned-on-self)))))
(self-alignment-X . ,LEFT)
,(ly:make-simple-closure
(list ly:self-alignment-interface::x-aligned-on-self)))))
(self-alignment-X . ,LEFT)
- (break-align-symbols . (key-signature time-signature))
+ (break-align-symbols . (time-signature))
(non-break-align-symbols . (multi-measure-rest-interface))
(non-musical . #t)
(meta . ((class . Item)
(non-break-align-symbols . (multi-measure-rest-interface))
(non-musical . #t)
(meta . ((class . Item)