X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fledger-line-engraver.cc;h=4ab91ece0fa7a5fd7172147c37bc68d1a19eae8f;hb=8536db51578c1d3ba3da834e5a308c2790dd4f87;hp=9a3a4156e117973d67675992f3b7ff30ac683036;hpb=7a5a58a6f270a0ee2f488305b8c1f222174fa742;p=lilypond.git diff --git a/lily/ledger-line-engraver.cc b/lily/ledger-line-engraver.cc index 9a3a4156e1..4ab91ece0f 100644 --- a/lily/ledger-line-engraver.cc +++ b/lily/ledger-line-engraver.cc @@ -1,64 +1,102 @@ -/* - ledger-line-engraver.cc -- implement Ledger_line_engraver= - +/* + ledger-line-engraver.cc -- implement Ledger_line_engraver + source file of the GNU LilyPond music typesetter - - (c) 2004 Han-Wen Nienhuys - -*/ + (c) 2004--2005 Han-Wen Nienhuys +*/ -#include "group-interface.hh" +#include "pointer-group-interface.hh" #include "spanner.hh" #include "engraver.hh" +#include "staff-symbol.hh" class Ledger_line_engraver : public Engraver { - Spanner * span_; + Spanner *span_; public: TRANSLATOR_DECLARATIONS (Ledger_line_engraver); protected: virtual void finalize (); - virtual void process_music (); - virtual void acknowledge_grob (Grob_info); + PRECOMPUTED_VIRTUAL void process_music (); + + DECLARE_ACKNOWLEDGER(ledgered); + DECLARE_ACKNOWLEDGER(staff_symbol); + + void start_spanner (); + void stop_spanner (); }; -Ledger_line_engraver::Ledger_line_engraver() +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_staff_symbol (Grob_info s) +{ + Spanner *sym = dynamic_cast (s.grob ()); + + if (!span_ + || span_->get_bound (LEFT) != sym->get_bound (LEFT)) + { + stop_spanner (); + start_spanner (); + } +} void -Ledger_line_engraver::acknowledge_grob (Grob_info s) +Ledger_line_engraver::acknowledge_ledgered (Grob_info s) { - Pointer_group_interface::add_grob (span_, ly_symbol2scm ("note-heads"), - s.grob_); + if (span_) + { + if (!to_boolean (s.grob ()->get_property ("no-ledgers"))) + Pointer_group_interface::add_grob (span_, ly_symbol2scm ("note-heads"), + s.grob ()); + } } -ENTER_DESCRIPTION (Ledger_line_engraver, - "Creates the spanner to draw ledger lines, and notices objects that need ledger lines", - /* creats*/ "LedgerLineSpanner", - /* accepts */ "", - /* acks */ "custos-interface note-head-interface", // ledgered-interface? - /* reads */ "", - /* write */ "") + +#include "translator.icc" + +ADD_ACKNOWLEDGER(Ledger_line_engraver,ledgered); +ADD_ACKNOWLEDGER(Ledger_line_engraver,staff_symbol); +ADD_TRANSLATOR (Ledger_line_engraver, + "Creates the spanner to draw ledger lines, and notices objects that need ledger lines", + /* creats*/ "LedgerLineSpanner", + /* accepts */ "", + /* reads */ "", + /* write */ "")