X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpiano-pedal-align-engraver.cc;h=0d07872db08b18eeb82ad7aef6a1d6747879908a;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=f5aa652a4a7ac5d174bd5a9b267c4cecd78e4f10;hpb=55ac733b69643a6bc6a83b706c65cb56efd388ef;p=lilypond.git diff --git a/lily/piano-pedal-align-engraver.cc b/lily/piano-pedal-align-engraver.cc index f5aa652a4a..0d07872db0 100644 --- a/lily/piano-pedal-align-engraver.cc +++ b/lily/piano-pedal-align-engraver.cc @@ -1,8 +1,8 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2011 Han-Wen Nienhuys - + Copyright (C) 2006--2015 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 @@ -18,7 +18,6 @@ along with LilyPond. If not, see . */ - #include "engraver.hh" #include "spanner.hh" @@ -28,18 +27,17 @@ #include "warn.hh" #include "axis-group-interface.hh" +#include "translator.icc" /* TODO: * Detach from pedal specifics, - + * Also use this engraver for dynamics. - */ - struct Pedal_align_info { Spanner *line_spanner_; @@ -77,18 +75,19 @@ public: protected: virtual void finalize (); - - DECLARE_ACKNOWLEDGER (piano_pedal_script); - DECLARE_ACKNOWLEDGER (piano_pedal_bracket); - DECLARE_ACKNOWLEDGER (note_column); - DECLARE_END_ACKNOWLEDGER (piano_pedal_bracket); + void acknowledge_piano_pedal_script (Grob_info); + void acknowledge_piano_pedal_bracket (Grob_info); + void acknowledge_note_column (Grob_info); + + void acknowledge_end_piano_pedal_bracket (Grob_info); void stop_translation_timestep (); void start_translation_timestep (); - + private: - enum Pedal_type { + enum Pedal_type + { SOSTENUTO, SUSTAIN, UNA_CORDA, @@ -101,7 +100,8 @@ private: Spanner *make_line_spanner (Pedal_type t, SCM); }; -Piano_pedal_align_engraver::Piano_pedal_align_engraver () +Piano_pedal_align_engraver::Piano_pedal_align_engraver (Context *c) + : Engraver (c) { } @@ -114,46 +114,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; } @@ -169,11 +168,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) { @@ -181,24 +179,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; } @@ -229,50 +227,51 @@ 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 (cc); + pedal_info_[i].line_spanner_->set_bound (RIGHT, c); - pedal_info_[i].clear (); - } + pedal_info_[i].clear (); + } } } -#include "translator.icc" -ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, note_column); -ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket); -ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_script); - -ADD_END_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket); +void +Piano_pedal_align_engraver::boot () +{ + ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, note_column); + ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket); + 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 */ + "" + );