Here's a patch for problems with ledger lines when using line-positions. >From 26d959b6b66a7929e1a2ceed8c0456e2113a91fe Mon Sep 17 00:00:00 2001 From: Kevin Dalley <[EMAIL PROTECTED]> Date: Mon, 19 Mar 2007 05:32:37 -0700 Subject: [PATCH] Corrected on_line for better ledger lines for different staffs. --- lily/include/staff-symbol.hh | 1 + lily/staff-symbol-referencer.cc | 3 +-- lily/staff-symbol.cc | 38 +++++++++++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/lily/include/staff-symbol.hh b/lily/include/staff-symbol.hh index edf3a0f..6439868 100644 --- a/lily/include/staff-symbol.hh +++ b/lily/include/staff-symbol.hh @@ -24,6 +24,7 @@ public: static int get_steps (Grob *); static int line_count (Grob *); + static bool on_line (Grob *me, int pos); DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (height, (SCM)); static bool has_interface (Grob *); diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index aa45e55..cf6e7ba 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -35,8 +35,7 @@ Staff_symbol_referencer::on_staff_line (Grob *me) bool Staff_symbol_referencer::on_line (Grob *me, int pos) { - int sz = line_count (me) - 1; - return ((pos + sz) % 2) == 0; + return Staff_symbol::on_line(me, pos); } bool diff --git a/lily/staff-symbol.cc b/lily/staff-symbol.cc index 554b2e2..b4cd2d3 100644 --- a/lily/staff-symbol.cc +++ b/lily/staff-symbol.cc @@ -168,7 +168,43 @@ Staff_symbol::height (SCM smob) } - +bool +Staff_symbol::on_line (Grob *me, int pos) +{ + SCM line_positions = me->get_property ("line-positions"); + if (scm_is_pair (line_positions)) + { + Real min_line = SCM_FLTMAX; + Real max_line = -SCM_FLTMAX; + for (SCM s = line_positions; scm_is_pair (s); + s = scm_cdr (s)) + { + Real current_line = scm_to_double (scm_car (s)); + if (pos == current_line){ + return true; + } + if (current_line > max_line){ + max_line = current_line; + } + if (current_line < min_line){ + min_line = current_line; + } + + } + if (pos < min_line){ + return ((int(rint(pos - min_line)) % 2) == 0); + } + if (pos > max_line){ + return ((int(rint(pos - max_line)) % 2) == 0); + } + + return false; + } + else + { + return ((abs(pos + line_count(me)) % 2) == 1); + } +} ADD_INTERFACE (Staff_symbol, "staff-symbol-interface", "This spanner draws the lines of a staff. " -- 1.5.0.3 _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel