From 50ef84dba811e9208de47322f679c6aef790a9a7 Mon Sep 17 00:00:00 2001 From: Neil Puttock Date: Tue, 6 Oct 2009 22:16:55 +0100 Subject: [PATCH] Fix #69 -- RehearsalMark visibility at end of score. --- input/regression/rehearsal-mark-final-score.ly | 12 ++++++++++++ lily/mark-engraver.cc | 23 ++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 input/regression/rehearsal-mark-final-score.ly diff --git a/input/regression/rehearsal-mark-final-score.ly b/input/regression/rehearsal-mark-final-score.ly new file mode 100644 index 0000000000..cb70f2cd28 --- /dev/null +++ b/input/regression/rehearsal-mark-final-score.ly @@ -0,0 +1,12 @@ +\version "2.13.6" + +\header { + texidoc = "Rehearsal marks at the end of the last measure of a +score are automatically made visible. +" +} + +\relative c' { + c1 + \mark "Final Mark" +} diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index 76977f91c6..7720dd2569 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -32,6 +32,7 @@ class Mark_engraver : public Engraver void create_items (Stream_event *); Item *text_; + Item *final_text_; Stream_event *mark_ev_; public: @@ -39,7 +40,9 @@ public: protected: void process_music (); + void start_translation_timestep (); void stop_translation_timestep (); + virtual void finalize (); DECLARE_TRANSLATOR_LISTENER (mark); DECLARE_ACKNOWLEDGER (break_alignment); @@ -48,6 +51,7 @@ protected: Mark_engraver::Mark_engraver () { text_ = 0; + final_text_ = 0; mark_ev_ = 0; } @@ -57,11 +61,14 @@ Mark_engraver::acknowledge_break_alignment (Grob_info inf) Grob *s = inf.grob (); if (text_ && dynamic_cast (s)) - { - text_->set_parent (s, X_AXIS); - } + text_->set_parent (s, X_AXIS); } +void +Mark_engraver::start_translation_timestep () +{ + final_text_ = 0; +} void Mark_engraver::stop_translation_timestep () @@ -70,12 +77,22 @@ Mark_engraver::stop_translation_timestep () { text_->set_object ("side-support-elements", grob_list_to_grob_array (get_property ("stavesFound"))); + final_text_ = text_; text_ = 0; } mark_ev_ = 0; } void +Mark_engraver::finalize () +{ + if (final_text_) + final_text_->set_property ("break-visibility", + scm_c_make_vector (3, SCM_BOOL_T)); + final_text_ = 0; +} + +void Mark_engraver::create_items (Stream_event *ev) { if (text_) -- 2.11.4.GIT