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
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs