From 82a76e3a74e270d85e1ee26182d2991bf9ec48d7 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 6 Jun 2005 16:09:28 +0000 Subject: [PATCH] * lily/ledger-line-engraver.cc (acknowledge_grob): create new LedgerLineSpanner if new StaffSymbol is found. * lily/staff-symbol-engraver.cc (acknowledge_grob): also set staff-symbol for finishing staff. --- ChangeLog | 6 ++++ lily/ledger-line-engraver.cc | 56 +++++++++++++++++++++++++++-------- lily/staff-symbol-engraver.cc | 7 +++-- 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf857ad5d0..b547a32537 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2005-06-06 Han-Wen Nienhuys + * lily/ledger-line-engraver.cc (acknowledge_grob): create new + LedgerLineSpanner if new StaffSymbol is found. + + * lily/staff-symbol-engraver.cc (acknowledge_grob): also set + staff-symbol for finishing staff. + * lily/GNUmakefile (OUT_DIST_FILES): don't dist Flex output * scm/output-svg.scm (setcolor): implement (re)setcolor with diff --git a/lily/ledger-line-engraver.cc b/lily/ledger-line-engraver.cc index c4ebc455d5..05ffa05b06 100644 --- a/lily/ledger-line-engraver.cc +++ b/lily/ledger-line-engraver.cc @@ -9,10 +9,8 @@ #include "group-interface.hh" #include "spanner.hh" #include "engraver.hh" +#include "staff-symbol.hh" -/* - TODO: should sync with Staff_symbol_engraver. -*/ class Ledger_line_engraver : public Engraver { Spanner *span_; @@ -24,6 +22,9 @@ protected: virtual void finalize (); virtual void process_music (); virtual void acknowledge_grob (Grob_info); + + void start_spanner (); + void stop_spanner (); }; Ledger_line_engraver::Ledger_line_engraver () @@ -31,35 +32,64 @@ Ledger_line_engraver::Ledger_line_engraver () span_ = 0; } +void +Ledger_line_engraver::start_spanner () +{ + assert (!span_); + span_ = make_spanner ("LedgerLineSpanner", SCM_EOL); + + span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); +} + void Ledger_line_engraver::process_music () { if (!span_) - { - span_ = make_spanner ("LedgerLineSpanner", SCM_EOL); - - span_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); - } + start_spanner (); } void Ledger_line_engraver::finalize () +{ + stop_spanner(); +} + +void +Ledger_line_engraver::stop_spanner () { if (span_) - span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn"))); + { + span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn"))); + span_ = 0; + } } void Ledger_line_engraver::acknowledge_grob (Grob_info s) { - if (!to_boolean (s.grob ()->get_property ("no-ledgers"))) - Pointer_group_interface::add_grob (span_, ly_symbol2scm ("note-heads"), - s.grob ()); + if (Staff_symbol::has_interface (s.grob ())) + { + Spanner *sym = dynamic_cast (s.grob ()); + + if (!span_ + || span_->get_bound (LEFT) != sym->get_bound (LEFT)) + { + stop_spanner (); + start_spanner (); + } + } + else if (span_) + { + if (!to_boolean (s.grob ()->get_property ("no-ledgers"))) + Pointer_group_interface::add_grob (span_, ly_symbol2scm ("note-heads"), + s.grob ()); + } } + ADD_TRANSLATOR (Ledger_line_engraver, "Creates the spanner to draw ledger lines, and notices objects that need ledger lines", /* creats*/ "LedgerLineSpanner", /* accepts */ "", - /* acks */ "ledgered-interface", // ledgered-interface? + /* acks */ "staff-symbol-interface ledgered-interface", // ledgered-interface? /* reads */ "", /* write */ "") diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index 3773df5652..5bc33f68db 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -101,8 +101,11 @@ Staff_symbol_engraver::acknowledge_grob (Grob_info s) Perhaps should try to take SeparationItem as bound of the staff symbol? */ - if (span_) - s.grob ()->set_property ("staff-symbol", span_->self_scm ()); + if (span_ || finished_span_ ) + { + Spanner *my = span_ ? span_ : finished_span_; + s.grob ()->set_property ("staff-symbol", my->self_scm ()); + } } ADD_TRANSLATOR (Staff_symbol_engraver, -- 2.39.2