public:
TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver);
vector<Spanner *> bracket_stack_;
+ vector<Spanner *> text_stack_;
vector<Stream_event *> events_;
vsize pop_count_;
vsize push_count_;
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;
ly_symbol2scm ("columns"), gi.grob ());
add_bound_item (bracket_stack_[i],
gi.grob ());
+ add_bound_item (text_stack_[i],
+ gi.grob ());
}
}
{
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);
+ {
+ 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);
}
}
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 ();
" purposes.",
/* create */
- "HorizontalBracket ",
+ "HorizontalBracket "
+ "HorizontalBracketText ",
/* read */
"",