X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fdouble-percent-repeat-engraver.cc;h=ec927c9eee5e733b117cf805dbb6c9b774dc4c77;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=ad64657e97bbbf32466a607ee7673341e11ec829;hpb=7439f9e74f8e33286c8af7f9a51fe4f7a4eb10fd;p=lilypond.git diff --git a/lily/double-percent-repeat-engraver.cc b/lily/double-percent-repeat-engraver.cc index ad64657e97..ec927c9eee 100644 --- a/lily/double-percent-repeat-engraver.cc +++ b/lily/double-percent-repeat-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2011 Neil Puttock + Copyright (C) 2011--2015 Neil Puttock LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,24 +38,24 @@ protected: // moment (global time) where percent started Moment start_mom_; - DECLARE_TRANSLATOR_LISTENER (double_percent); + void listen_double_percent (Stream_event *); void process_music (); }; -Double_percent_repeat_engraver::Double_percent_repeat_engraver () +Double_percent_repeat_engraver::Double_percent_repeat_engraver (Context *c) + : Engraver (c) { percent_event_ = 0; } -IMPLEMENT_TRANSLATOR_LISTENER (Double_percent_repeat_engraver, double_percent); void Double_percent_repeat_engraver::listen_double_percent (Stream_event *ev) { if (!percent_event_) { Moment meas_len (robust_scm2moment (get_property ("measureLength"), - Moment (1))); + Moment (1))); start_mom_ = now_mom () + meas_len; get_global_context ()->add_moment_to_process (start_mom_); percent_event_ = ev; @@ -70,44 +70,50 @@ Double_percent_repeat_engraver::process_music () if (percent_event_ && now_mom ().main_part_ == start_mom_.main_part_) { Item *double_percent = make_item ("DoublePercentRepeat", - percent_event_->self_scm ()); + percent_event_->self_scm ()); SCM count = percent_event_->get_property ("repeat-count"); - if (count != SCM_EOL && to_boolean (get_property ("countPercentRepeats")) - && check_repeat_count_visibility (context (), count)) - { - Item *double_percent_counter - = make_item ("DoublePercentRepeatCounter", - percent_event_->self_scm ()); - - SCM text = scm_number_to_string (count, scm_from_int (10)); - double_percent_counter->set_property ("text", text); - - Side_position_interface::add_support (double_percent_counter, - double_percent); - double_percent_counter->set_parent (double_percent, Y_AXIS); - double_percent_counter->set_parent (double_percent, X_AXIS); - } + if (!scm_is_null (count) && to_boolean (get_property ("countPercentRepeats")) + && check_repeat_count_visibility (context (), count)) + { + Item *double_percent_counter + = make_item ("DoublePercentRepeatCounter", + percent_event_->self_scm ()); + + SCM text = scm_number_to_string (count, scm_from_int (10)); + double_percent_counter->set_property ("text", text); + + Side_position_interface::add_support (double_percent_counter, + double_percent); + double_percent_counter->set_parent (double_percent, Y_AXIS); + double_percent_counter->set_parent (double_percent, X_AXIS); + } // forbid breaks on a % line context ()->get_score_context ()->set_property ("forbidBreak", - SCM_BOOL_T); + SCM_BOOL_T); percent_event_ = 0; } } +void +Double_percent_repeat_engraver::boot () +{ + ADD_LISTENER (Double_percent_repeat_engraver, double_percent); +} + ADD_TRANSLATOR (Double_percent_repeat_engraver, - /* doc */ - "Make double measure repeats.", + /* doc */ + "Make double measure repeats.", - /* create */ - "DoublePercentRepeat " - "DoublePercentRepeatCounter ", + /* create */ + "DoublePercentRepeat " + "DoublePercentRepeatCounter ", - /* read */ - "countPercentRepeats " - "measureLength " - "repeatCountVisibility ", + /* read */ + "countPercentRepeats " + "measureLength " + "repeatCountVisibility ", - /* write */ - "forbidBreak " - ); + /* write */ + "forbidBreak " + );