[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Fix issue 4040: Dots ignoring shifted ledger lines (issue 220090043 by a
From: |
paulwmorris |
Subject: |
Fix issue 4040: Dots ignoring shifted ledger lines (issue 220090043 by address@hidden) |
Date: |
Mon, 23 Mar 2015 03:45:41 +0000 |
Reviewers: ,
Message:
Please review, thanks!
-Paul
Description:
Fix issue 4040: Dots ignoring shifted ledger lines
includes the following two commits:
add test staff-ledger-positions-dotted-notes.ly
tests positioning of dots on dotted notes with
custom ledger line positions (issue 4040)
staff-symbol.cc: on_line and custom ledger lines
make Staff_symbol::on_line work properly with
custom ledger line positions
Please review this at https://codereview.appspot.com/220090043/
Affected files (+47, -28 lines):
A input/regression/staff-ledger-positions-dotted-notes.ly
M lily/staff-symbol.cc
Index: input/regression/staff-ledger-positions-dotted-notes.ly
diff --git a/input/regression/staff-ledger-positions-dotted-notes.ly
b/input/regression/staff-ledger-positions-dotted-notes.ly
new file mode 100644
index
0000000000000000000000000000000000000000..31e10acb3d1bd5546a95a69252ae102b5a4113ce
--- /dev/null
+++ b/input/regression/staff-ledger-positions-dotted-notes.ly
@@ -0,0 +1,16 @@
+\header {
+
+ texidoc = "When the vertical positions of ledger lines have been
+customized by setting the @code{ledger-positions} property of the
+StaffSymbol, and a dotted note falls on a ledger line, the dot is shifted
+up to avoid the ledger line (just as with uncustomized ledger lines)."
+}
+
+\version "2.19.17"
+
+\new Staff \relative c' {
+ \override Staff.StaffSymbol.line-positions = #'(-3 0 3)
+ \override Staff.StaffSymbol.ledger-positions = #'(-3 0)
+ \override Staff.StaffSymbol.ledger-extra = #1
+ f,4. g a b c d g' a b c d e
+}
Index: lily/staff-symbol.cc
diff --git a/lily/staff-symbol.cc b/lily/staff-symbol.cc
index
6ae66d85c1880bb0dd817c70389abc43aff262a5..f4b18dfd78ad67e5e2c067332f36b0c130cd5605
100644
--- a/lily/staff-symbol.cc
+++ b/lily/staff-symbol.cc
@@ -316,34 +316,9 @@ Staff_symbol::height (SCM smob)
bool
Staff_symbol::on_line (Grob *me, int pos, bool allow_ledger)
{
- SCM line_positions = me->get_property ("line-positions");
- if (scm_is_pair (line_positions))
- {
- Real min_line = HUGE_VAL;
- Real max_line = -HUGE_VAL;
- 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 (allow_ledger)
- {
- 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
+ // standard staff lines (any line count) and standard ledger lines
+ if (!scm_is_pair (me->get_property ("line-positions"))
+ && !scm_is_pair (me->get_property ("ledger-positions")))
{
int const line_cnt = line_count (me);
bool result = abs (pos + line_cnt) % 2 == 1;
@@ -353,6 +328,34 @@ Staff_symbol::on_line (Grob *me, int pos, bool
allow_ledger)
}
return result;
}
+
+ // staff lines (custom or standard)
+ vector<Real> lines = Staff_symbol::line_positions (me);
+ for (vector<Real>::const_iterator i = lines.begin (),
+ e = lines.end ();
+ i != e;
+ ++i)
+ {
+ if (pos == *i)
+ return true;
+ }
+
+ // ledger lines (custom or standard)
+ if (allow_ledger)
+ {
+ vector<Real> ledgers = Staff_symbol::ledger_positions (me, pos);
+ if (ledgers.empty ())
+ return false;
+ for (vector<Real>::const_iterator i = ledgers.begin (),
+ e = ledgers.end ();
+ i != e;
+ ++i)
+ {
+ if (pos == *i)
+ return true;
+ }
+ }
+ return false;
}
Interval
- Fix issue 4040: Dots ignoring shifted ledger lines (issue 220090043 by address@hidden),
paulwmorris <=