X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpiano-pedal-align-engraver.cc;h=e05cee9e058c4d47cea7c1f7093b64e972a0b2d3;hb=0b544cfb7332615ef809b71b57ab656741311ae1;hp=a7031fbb018cb1592cbc3d8d4c9a903cb0f0671b;hpb=f9214bac21e9926dc3248416f58190c98c4167a9;p=lilypond.git diff --git a/lily/piano-pedal-align-engraver.cc b/lily/piano-pedal-align-engraver.cc index a7031fbb01..e05cee9e05 100644 --- a/lily/piano-pedal-align-engraver.cc +++ b/lily/piano-pedal-align-engraver.cc @@ -1,12 +1,22 @@ -/* - piano-pedal-align-engraver.cc -- implement Piano_pedal_align_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2006--2007 Han-Wen Nienhuys - -*/ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 2006--2014 Han-Wen Nienhuys + + + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ #include "engraver.hh" @@ -17,18 +27,15 @@ #include "warn.hh" #include "axis-group-interface.hh" - /* TODO: * Detach from pedal specifics, - + * Also use this engraver for dynamics. - */ - struct Pedal_align_info { Spanner *line_spanner_; @@ -66,7 +73,7 @@ public: protected: virtual void finalize (); - + DECLARE_ACKNOWLEDGER (piano_pedal_script); DECLARE_ACKNOWLEDGER (piano_pedal_bracket); DECLARE_ACKNOWLEDGER (note_column); @@ -75,9 +82,10 @@ protected: void stop_translation_timestep (); void start_translation_timestep (); - + private: - enum Pedal_type { + enum Pedal_type + { SOSTENUTO, SUSTAIN, UNA_CORDA, @@ -103,46 +111,45 @@ Piano_pedal_align_engraver::start_translation_timestep () void Piano_pedal_align_engraver::stop_translation_timestep () { - for (int i = 0; i < NUM_PEDAL_TYPES; i ++) + for (int i = 0; i < NUM_PEDAL_TYPES; i++) { if (pedal_info_[i].line_spanner_) - { - - if (pedal_info_[i].carrying_item_) - { - if (!pedal_info_[i].line_spanner_->get_bound (LEFT)) - pedal_info_[i].line_spanner_->set_bound (LEFT, - pedal_info_[i].carrying_item_); - - pedal_info_[i].line_spanner_->set_bound (RIGHT, - pedal_info_[i].carrying_item_); - } - else if (pedal_info_[i].carrying_spanner_ - || pedal_info_[i].finished_carrying_spanner_ - ) - { - if (!pedal_info_[i].line_spanner_->get_bound (LEFT) - && pedal_info_[i].carrying_spanner_->get_bound (LEFT)) - pedal_info_[i].line_spanner_->set_bound (LEFT, - pedal_info_[i].carrying_spanner_->get_bound (LEFT)); - - - if (pedal_info_[i].finished_carrying_spanner_) - pedal_info_[i].line_spanner_->set_bound (RIGHT, - pedal_info_[i].finished_carrying_spanner_->get_bound (RIGHT)); - } - - for (vsize j = 0; j < supports_.size (); j++) - { - Side_position_interface::add_support (pedal_info_[i].line_spanner_, supports_[j]); - } - - if (pedal_info_[i].is_finished ()) - { - announce_end_grob (pedal_info_[i].line_spanner_, SCM_EOL); - pedal_info_[i].clear (); - } - } + { + + if (pedal_info_[i].carrying_item_) + { + if (!pedal_info_[i].line_spanner_->get_bound (LEFT)) + pedal_info_[i].line_spanner_->set_bound (LEFT, + pedal_info_[i].carrying_item_); + + pedal_info_[i].line_spanner_->set_bound (RIGHT, + pedal_info_[i].carrying_item_); + } + else if (pedal_info_[i].carrying_spanner_ + || pedal_info_[i].finished_carrying_spanner_ + ) + { + if (!pedal_info_[i].line_spanner_->get_bound (LEFT) + && pedal_info_[i].carrying_spanner_->get_bound (LEFT)) + pedal_info_[i].line_spanner_->set_bound (LEFT, + pedal_info_[i].carrying_spanner_->get_bound (LEFT)); + + if (pedal_info_[i].finished_carrying_spanner_) + pedal_info_[i].line_spanner_->set_bound (RIGHT, + pedal_info_[i].finished_carrying_spanner_->get_bound (RIGHT)); + } + + for (vsize j = 0; j < supports_.size (); j++) + { + Side_position_interface::add_support (pedal_info_[i].line_spanner_, supports_[j]); + } + + if (pedal_info_[i].is_finished ()) + { + announce_end_grob (pedal_info_[i].line_spanner_, SCM_EOL); + pedal_info_[i].clear (); + } + } pedal_info_[i].carrying_item_ = 0; } @@ -158,11 +165,10 @@ Piano_pedal_align_engraver::get_grob_pedal_type (Grob_info g) if (g.event_cause ()->in_event_class ("una-corda-event")) return UNA_CORDA; - programming_error ("Unknown piano pedal type. Defaulting to sustain"); + programming_error ("Unknown piano pedal type. Defaulting to sustain"); return SUSTAIN; } - Spanner * Piano_pedal_align_engraver::make_line_spanner (Pedal_type t, SCM cause) { @@ -170,24 +176,24 @@ Piano_pedal_align_engraver::make_line_spanner (Pedal_type t, SCM cause) if (!sp) { switch (t) - { - case (SOSTENUTO): - sp = make_spanner ("SostenutoPedalLineSpanner", cause); - break; - case (SUSTAIN): - sp = make_spanner ("SustainPedalLineSpanner", cause); - break; - case (UNA_CORDA): - sp = make_spanner ("UnaCordaPedalLineSpanner", cause); - break; - default: - programming_error ("No pedal type fonud!") ; - return sp; - } - + { + case (SOSTENUTO): + sp = make_spanner ("SostenutoPedalLineSpanner", cause); + break; + case (SUSTAIN): + sp = make_spanner ("SustainPedalLineSpanner", cause); + break; + case (UNA_CORDA): + sp = make_spanner ("UnaCordaPedalLineSpanner", cause); + break; + default: + programming_error ("No pedal type fonud!"); + return sp; + } + pedal_info_[t].line_spanner_ = sp; } - + return sp; } @@ -218,26 +224,25 @@ void Piano_pedal_align_engraver::acknowledge_piano_pedal_script (Grob_info gi) { Pedal_type type = get_grob_pedal_type (gi); - + Grob *sp = make_line_spanner (type, gi.grob ()->self_scm ()); Axis_group_interface::add_element (sp, gi.grob ()); pedal_info_[type].carrying_item_ = gi.grob (); } - void Piano_pedal_align_engraver::finalize () { - for (int i = 0; i < NUM_PEDAL_TYPES; i ++) + for (int i = 0; i < NUM_PEDAL_TYPES; i++) { if (pedal_info_[i].line_spanner_) - { - SCM cc = get_property ("currentCommandColumn"); - Item *c = unsmob_item (cc); - pedal_info_[i].line_spanner_->set_bound (RIGHT, c); + { + SCM cc = get_property ("currentCommandColumn"); + Item *c = unsmob_item (cc); + pedal_info_[i].line_spanner_->set_bound (RIGHT, c); - pedal_info_[i].clear (); - } + pedal_info_[i].clear (); + } } } @@ -249,18 +254,18 @@ ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_script); ADD_END_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket); - ADD_TRANSLATOR (Piano_pedal_align_engraver, + /* doc */ + "Align piano pedal symbols and brackets.", - /* doc */ - "Align piano pedal symbols and brackets.", - - /* create */ - "SostenutoPedalLineSpanner " - "SustainPedalLineSpanner " - "UnaCordaPedalLineSpanner ", + /* create */ + "SostenutoPedalLineSpanner " + "SustainPedalLineSpanner " + "UnaCordaPedalLineSpanner ", - /* read */ - "currentCommandColumn ", + /* read */ + "currentCommandColumn ", - /* write */ ""); + /* write */ + "" + );