CVSROOT:        /cvsroot/lilypond
Module name:    lilypond
Branch:         
Changes by:     Han-Wen Nienhuys <[EMAIL PROTECTED]>    05/06/06 16:09:28

Modified files:
        .              : ChangeLog 
        lily           : ledger-line-engraver.cc 
                         staff-symbol-engraver.cc 

Log message:
        * 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.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3722&tr2=1.3723&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/ledger-line-engraver.cc.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/staff-symbol-engraver.cc.diff?tr1=1.50&tr2=1.51&r1=text&r2=text

Patches:
Index: lilypond/ChangeLog
diff -u lilypond/ChangeLog:1.3722 lilypond/ChangeLog:1.3723
--- lilypond/ChangeLog:1.3722   Mon Jun  6 15:45:56 2005
+++ lilypond/ChangeLog  Mon Jun  6 16:09:28 2005
@@ -1,5 +1,11 @@
 2005-06-06  Han-Wen Nienhuys  <[EMAIL PROTECTED]>
 
+       * 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: lilypond/lily/ledger-line-engraver.cc
diff -u lilypond/lily/ledger-line-engraver.cc:1.14 
lilypond/lily/ledger-line-engraver.cc:1.15
--- lilypond/lily/ledger-line-engraver.cc:1.14  Sun May  8 23:30:50 2005
+++ lilypond/lily/ledger-line-engraver.cc       Mon Jun  6 16:09:28 2005
@@ -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 @@
   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 ()
@@ -32,34 +33,63 @@
 }
 
 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: lilypond/lily/staff-symbol-engraver.cc
diff -u lilypond/lily/staff-symbol-engraver.cc:1.50 
lilypond/lily/staff-symbol-engraver.cc:1.51
--- lilypond/lily/staff-symbol-engraver.cc:1.50 Fri May 13 11:53:03 2005
+++ lilypond/lily/staff-symbol-engraver.cc      Mon Jun  6 16:09:28 2005
@@ -101,8 +101,11 @@
     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,


_______________________________________________
Lilypond-cvs mailing list
Lilypond-cvs@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-cvs

Reply via email to