X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpercent-repeat-engraver.cc;h=da0b9b2964279f21d69113646a149ccbf78bac1f;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=1b437b28224b302d60ade8126f28b6e395101354;hpb=7439f9e74f8e33286c8af7f9a51fe4f7a4eb10fd;p=lilypond.git diff --git a/lily/percent-repeat-engraver.cc b/lily/percent-repeat-engraver.cc index 1b437b2822..da0b9b2964 100644 --- a/lily/percent-repeat-engraver.cc +++ b/lily/percent-repeat-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2000--2011 Han-Wen Nienhuys , Erik Sandberg + Copyright (C) 2000--2015 Han-Wen Nienhuys , Erik Sandberg LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,7 +17,6 @@ along with LilyPond. If not, see . */ - #include "engraver.hh" #include "global-context.hh" #include "international.hh" @@ -35,7 +34,7 @@ class Percent_repeat_engraver : public Engraver public: TRANSLATOR_DECLARATIONS (Percent_repeat_engraver); - + protected: Stream_event *percent_event_; @@ -51,14 +50,15 @@ protected: Moment command_moment_; virtual void finalize (); - DECLARE_TRANSLATOR_LISTENER (percent); + void listen_percent (Stream_event *); void start_translation_timestep (); void stop_translation_timestep (); void process_music (); }; -Percent_repeat_engraver::Percent_repeat_engraver () +Percent_repeat_engraver::Percent_repeat_engraver (Context *c) + : Engraver (c) { percent_ = 0; percent_counter_ = 0; @@ -74,19 +74,18 @@ Percent_repeat_engraver::start_translation_timestep () if (now_mom ().main_part_ != command_moment_.main_part_) { first_command_column_ - = unsmob_grob (get_property ("currentCommandColumn")); + = unsmob (get_property ("currentCommandColumn")); command_moment_ = now_mom (); } if (stop_mom_.main_part_ == now_mom ().main_part_) { if (percent_) - typeset_perc (); + typeset_perc (); percent_event_ = 0; } } -IMPLEMENT_TRANSLATOR_LISTENER (Percent_repeat_engraver, percent); void Percent_repeat_engraver::listen_percent (Stream_event *ev) { @@ -101,8 +100,8 @@ Percent_repeat_engraver::listen_percent (Stream_event *ev) else { /* - print a warning: no assignment happens because - percent_event_ != 0 + print a warning: no assignment happens because + percent_event_ != 0 */ ASSIGN_EVENT_ONCE (percent_event_, ev); } @@ -115,7 +114,7 @@ Percent_repeat_engraver::process_music () && now_mom ().main_part_ == start_mom_.main_part_) { if (percent_) - typeset_perc (); + typeset_perc (); percent_ = make_spanner ("PercentRepeat", percent_event_->self_scm ()); @@ -123,20 +122,21 @@ Percent_repeat_engraver::process_music () percent_->set_bound (LEFT, col); SCM count = percent_event_->get_property ("repeat-count"); - if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats")) - && check_repeat_count_visibility (context (), count)) - { - percent_counter_ = make_spanner ("PercentRepeatCounter", - percent_event_->self_scm ()); - - SCM text = scm_number_to_string (count, scm_from_int (10)); - percent_counter_->set_property ("text", text); - percent_counter_->set_bound (LEFT, col); - Side_position_interface::add_support (percent_counter_, percent_); - percent_counter_->set_parent (percent_, Y_AXIS); - } + if (!scm_is_null (count) && to_boolean (get_property ("countPercentRepeats")) + && check_repeat_count_visibility (context (), count)) + { + percent_counter_ = make_spanner ("PercentRepeatCounter", + percent_event_->self_scm ()); + + SCM text = scm_number_to_string (count, scm_from_int (10)); + percent_counter_->set_property ("text", text); + percent_counter_->set_bound (LEFT, col); + Side_position_interface::add_support (percent_counter_, percent_); + percent_counter_->set_parent (percent_, Y_AXIS); + percent_counter_->set_parent (percent_, X_AXIS); + } else - percent_counter_ = 0; + percent_counter_ = 0; } } @@ -169,19 +169,25 @@ Percent_repeat_engraver::stop_translation_timestep () { } +void +Percent_repeat_engraver::boot () +{ + ADD_LISTENER (Percent_repeat_engraver, percent); +} + ADD_TRANSLATOR (Percent_repeat_engraver, - /* doc */ - "Make whole measure repeats.", - - /* create */ - "PercentRepeat " - "PercentRepeatCounter ", - - /* read */ - "countPercentRepeats " - "currentCommandColumn " - "repeatCountVisibility ", - - /* write */ - "" - ); + /* doc */ + "Make whole measure repeats.", + + /* create */ + "PercentRepeat " + "PercentRepeatCounter ", + + /* read */ + "countPercentRepeats " + "currentCommandColumn " + "repeatCountVisibility ", + + /* write */ + "" + );