class Span_bar_engraver : public Engraver
{
Item *spanbar_;
+ bool make_spanbar_;
vector<Item *> bars_;
public:
protected:
DECLARE_ACKNOWLEDGER (bar_line);
void stop_translation_timestep ();
+ void process_acknowledged ();
};
Span_bar_engraver::Span_bar_engraver ()
{
spanbar_ = 0;
+ make_spanbar_ = false;
}
void
bars_.push_back (it);
if (bars_.size () >= 2 && !spanbar_)
- {
- spanbar_ = make_item ("SpanBar", SCM_EOL);
+ make_spanbar_ = true;
+ }
+}
+
+void
+Span_bar_engraver::process_acknowledged ()
+{
+ if (make_spanbar_)
+ {
+ Grob *vag = Grob::get_root_vertical_alignment (bars_[0]);
+ if (vag)
+ vector_sort (bars_, Grob::vertical_less);
+ spanbar_ = make_item ("SpanBar", SCM_EOL);
- spanbar_->set_parent (bars_[0], X_AXIS);
- }
+ spanbar_->set_parent (bars_[0], X_AXIS);
+ for (vsize i = 0; i < bars_.size (); i++)
+ Span_bar::add_bar (spanbar_, bars_[i]);
+ make_spanbar_ = false;
}
}
{
if (spanbar_)
{
+ vector_sort (bars_, Grob::vertical_less);
for (vsize i = 0; i < bars_.size (); i++)
Span_bar::add_bar (spanbar_, bars_[i]);