2006-06-06 Han-Wen Nienhuys <hanwen@lilypond.org>
+ * lily/ledger-line-engraver.cc (stop_translation_timestep): new
+ function. Delay ledger modifying ledgered grobs to
+ stop_translation_timestep(), to ensure that we're ledgering
+ according to the new spanner.
+ (acknowledge_staff_symbol): don't check for non-NULL
+ staff_sym->get_bound()
+
+ * lily/staff-symbol-engraver.cc (start_spanner): set left bound on
+ creation.
+
* Documentation/pictures/GNUmakefile (XPM_FILES): src-wildcard for
pictures too.
class Ledger_line_engraver : public Engraver
{
Spanner *span_;
-
+ vector<Grob*> ledgered_grobs_;
+
public:
TRANSLATOR_DECLARATIONS (Ledger_line_engraver);
void start_spanner ();
void stop_spanner ();
+ void stop_translation_timestep ();
};
Ledger_line_engraver::Ledger_line_engraver ()
Ledger_line_engraver::start_spanner ()
{
assert (!span_);
- span_ = make_spanner ("LedgerLineSpanner", SCM_EOL);
+ span_ = make_spanner ("LedgerLineSpanner", SCM_EOL);
span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
}
+void
+Ledger_line_engraver::stop_translation_timestep ()
+{
+ if (span_)
+ {
+ for (vsize i = 0; i < ledgered_grobs_.size (); i++)
+ {
+ if (!to_boolean (ledgered_grobs_[i]->get_property ("no-ledgers")))
+ Pointer_group_interface::add_grob (span_,
+ ly_symbol2scm ("note-heads"),
+ ledgered_grobs_[i]);
+ }
+ }
+
+ ledgered_grobs_.clear ();
+}
+
void
Ledger_line_engraver::process_music ()
{
Spanner *sym = dynamic_cast<Spanner *> (s.grob ());
if (!span_
- || (span_->get_bound (LEFT) != sym->get_bound (LEFT)
- && sym->get_bound (LEFT)))
+ || (span_->get_bound (LEFT) != sym->get_bound (LEFT)))
{
stop_spanner ();
start_spanner ();
void
Ledger_line_engraver::acknowledge_ledgered (Grob_info s)
{
- if (span_)
- {
- if (!to_boolean (s.grob ()->get_property ("no-ledgers")))
- Pointer_group_interface::add_grob (span_, ly_symbol2scm ("note-heads"),
- s.grob ());
- }
+ ledgered_grobs_.push_back (s.grob ());
}
#include "translator.icc"
Staff_symbol_engraver::start_spanner ()
{
if (!span_)
- span_ = make_spanner ("StaffSymbol", SCM_EOL);
+ {
+ span_ = make_spanner ("StaffSymbol", SCM_EOL);
+ span_->set_bound (LEFT,
+ unsmob_grob (get_property ("currentCommandColumn")));
+ }
}
void
Staff_symbol_engraver::stop_translation_timestep ()
{
if ((span_events_[START] || first_start_)
- && span_
- && !span_->get_bound (LEFT))
+ && span_)
{
- span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
first_start_ = false;
}
}
#include "translator.icc"
+
ADD_ACKNOWLEDGER (Staff_symbol_engraver, grob);
+
ADD_TRANSLATOR (Staff_symbol_engraver,
/* doc */ "Create the constellation of five (default) "
"staff lines.",