X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fhorizontal-bracket-engraver.cc;h=860495750ad4124c5cff1c9c0b432800b668dfb6;hb=750b714488c5af6eae22d07163bba8b554734ac6;hp=9d5c00503dca8ce6758e623076678a957bee8606;hpb=dcca081b1904b4db09658657631d919f280c06d2;p=lilypond.git diff --git a/lily/horizontal-bracket-engraver.cc b/lily/horizontal-bracket-engraver.cc index 9d5c00503d..860495750a 100644 --- a/lily/horizontal-bracket-engraver.cc +++ b/lily/horizontal-bracket-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2002--2011 Han-Wen Nienhuys + Copyright (C) 2002--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 @@ -33,23 +33,24 @@ class Horizontal_bracket_engraver : public Engraver public: TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver); vector bracket_stack_; + vector text_stack_; vector events_; vsize pop_count_; vsize push_count_; void stop_translation_timestep (); void process_music (); - DECLARE_ACKNOWLEDGER (note_column); - DECLARE_TRANSLATOR_LISTENER (note_grouping); + void acknowledge_note_column (Grob_info); + void listen_note_grouping (Stream_event *); }; -Horizontal_bracket_engraver::Horizontal_bracket_engraver () +Horizontal_bracket_engraver::Horizontal_bracket_engraver (Context *c) + : Engraver (c) { pop_count_ = 0; push_count_ = 0; } -IMPLEMENT_TRANSLATOR_LISTENER (Horizontal_bracket_engraver, note_grouping); void Horizontal_bracket_engraver::listen_note_grouping (Stream_event *ev) { @@ -59,7 +60,7 @@ Horizontal_bracket_engraver::listen_note_grouping (Stream_event *ev) { pop_count_++; if (pop_count_ > bracket_stack_.size ()) - ev->origin ()->warning (_ ("do not have that many brackets")); + ev->origin ()->warning (_ ("do not have that many brackets")); } else { @@ -78,9 +79,11 @@ Horizontal_bracket_engraver::acknowledge_note_column (Grob_info gi) { Side_position_interface::add_support (bracket_stack_[i], gi.grob ()); Pointer_group_interface::add_grob (bracket_stack_[i], - ly_symbol2scm ("columns"), gi.grob ()); + ly_symbol2scm ("columns"), gi.grob ()); add_bound_item (bracket_stack_[i], - gi.grob ()); + gi.grob ()); + add_bound_item (text_stack_[i], + gi.grob ()); } } @@ -91,10 +94,25 @@ Horizontal_bracket_engraver::process_music () { Spanner *sp = make_spanner ("HorizontalBracket", events_[k]->self_scm ()); + Spanner *hbt = make_spanner ("HorizontalBracketText", sp->self_scm ()); + + sp->set_object ("bracket-text", hbt->self_scm ()); + + Side_position_interface::add_support (hbt, sp); + + hbt->set_parent (sp, X_AXIS); + hbt->set_parent (sp, Y_AXIS); + hbt->set_object ("bracket", sp->self_scm ()); + for (vsize i = 0; i < bracket_stack_.size (); i++) - /* sp is the smallest, it should be added to the bigger brackets. */ - Side_position_interface::add_support (bracket_stack_[i], sp); + /* sp is the smallest, it should be added to the bigger brackets. */ + { + Side_position_interface::add_support (bracket_stack_[i], sp); + Side_position_interface::add_support (bracket_stack_[i], hbt); + } + bracket_stack_.push_back (sp); + text_stack_.push_back (hbt); } } @@ -102,25 +120,36 @@ void Horizontal_bracket_engraver::stop_translation_timestep () { for (vsize i = pop_count_; i--;) - if (bracket_stack_.size ()) - bracket_stack_.pop_back (); + { + if (bracket_stack_.size ()) + bracket_stack_.pop_back (); + if (text_stack_.size ()) + text_stack_.pop_back (); + } pop_count_ = 0; push_count_ = 0; events_.clear (); } -ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column); +void +Horizontal_bracket_engraver::boot () +{ + ADD_LISTENER (Horizontal_bracket_engraver, note_grouping); + ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column); +} + ADD_TRANSLATOR (Horizontal_bracket_engraver, - /* doc */ - "Create horizontal brackets over notes for musical analysis" - " purposes.", + /* doc */ + "Create horizontal brackets over notes for musical analysis" + " purposes.", - /* create */ - "HorizontalBracket ", + /* create */ + "HorizontalBracket " + "HorizontalBracketText ", - /* read */ - "", + /* read */ + "", - /* write */ - "" - ); + /* write */ + "" + );