]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/ledger-line-engraver.cc (acknowledge_grob): create new
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 6 Jun 2005 16:09:28 +0000 (16:09 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 6 Jun 2005 16:09:28 +0000 (16:09 +0000)
LedgerLineSpanner if new StaffSymbol is found.

* lily/staff-symbol-engraver.cc (acknowledge_grob): also set
staff-symbol for finishing staff.

ChangeLog
lily/ledger-line-engraver.cc
lily/staff-symbol-engraver.cc

index bf857ad5d0ad4a836acae0ab7b1279fecf9eba10..b547a325375448c3db34317a0420874b83f1324e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2005-06-06  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * 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 <g>
index c4ebc455d560fe8727b4cf4863d0e74a61d39ea3..05ffa05b0659f64f305a4f81b4f5e0985aa06862 100644 (file)
@@ -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<Spanner*> (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 */ "")
index 3773df56520cdfed23e858d205045976bd0a2350..5bc33f68db535b023489b84070d31b43f9a4c000 100644 (file)
@@ -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,