/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
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);
-
- spanbar_->set_parent (bars_[0], X_AXIS);
- }
+ make_spanbar_ = true;
}
}
void
-Span_bar_engraver::stop_translation_timestep ()
+Span_bar_engraver::process_acknowledged ()
{
- if (spanbar_)
+ if (make_spanbar_)
{
+ spanbar_ = make_item ("SpanBar", SCM_EOL);
+
+ 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;
+ }
+}
+void
+Span_bar_engraver::stop_translation_timestep ()
+{
+ if (spanbar_)
+ {
SCM vissym = ly_symbol2scm ("break-visibility");
SCM vis = bars_[0]->internal_get_property (vissym);
if (ly_is_equal (spanbar_->internal_get_property (vissym), vis))
spanbar_->set_property (vissym, vis);
-
+ Span_bar::notify_grobs_of_my_existence (spanbar_);
spanbar_ = 0;
}
bars_.resize (0);