From ad6b6af8d2a91a18b39d7def9a0a2ea07f81d26f Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Mon, 7 Jun 2010 23:48:26 +0200 Subject: [PATCH] Align metronome mark also on MultiMeasureRest. Fixes #684. Metronome marks no longer disappear on multi measure rests. --- lily/metronome-engraver.cc | 35 ++++++++++++++++++++++++++++------- scm/define-grobs.scm | 4 +++- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/lily/metronome-engraver.cc b/lily/metronome-engraver.cc index a37a9475fb..a1024049d5 100644 --- a/lily/metronome-engraver.cc +++ b/lily/metronome-engraver.cc @@ -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 */ diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 8b9a1f1dc3..39a2abd8f3 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -1155,6 +1155,7 @@ (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) @@ -1170,7 +1171,7 @@ (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 @@ -1180,6 +1181,7 @@ (MultiMeasureRest . ( + (break-align-symbol . multi-measure-rest) (expand-limit . 10) (hair-thickness . 2.0) (padding . 1) -- 2.39.2