lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Allow override of NoteHead.ledger-positions (issue 295970043 by address@


From: paulwmorris
Subject: Allow override of NoteHead.ledger-positions (issue 295970043 by address@hidden)
Date: Wed, 20 Apr 2016 13:29:54 +0000

Reviewers: ,

Message:
Please review.  I've posted an implementation question in the issue
tracker.

https://sourceforge.net/p/testlilyissues/issues/4828/

Thanks, -Paul

Description:
Allow override of NoteHead.ledger-positions

Can be a literal list of positions:
\once \override NoteHead.ledger-positions = #'(...)

Or a scheme procedure that returns such a list:
\override NoteHead.ledger-positions = #(lambda (grob) ...)

Please review this at https://codereview.appspot.com/295970043/

Affected files (+38, -5 lines):
  A input/regression/ledger-positions-override-via-note-head.ly
  M lily/ledger-line-spanner.cc
  M lily/note-head.cc
  M scm/define-grob-properties.scm


Index: input/regression/ledger-positions-override-via-note-head.ly
diff --git a/input/regression/ledger-positions-override-via-note-head.ly b/input/regression/ledger-positions-override-via-note-head.ly
new file mode 100644
index 0000000000000000000000000000000000000000..0894373ca31884481fa973c7892722905649d69a
--- /dev/null
+++ b/input/regression/ledger-positions-override-via-note-head.ly
@@ -0,0 +1,18 @@
+
+\header {
+
+texidoc = "Ledger line positions can be overridden
+via NoteHead grobs."
+
+}
+
+\version "2.19.41"
+\paper { ragged-right = ##t }
+\relative {
+  c'''4
+  \once \override NoteHead.ledger-positions = #'(8 10 12 14)
+  c
+  \override NoteHead.ledger-positions =
+  #(lambda (grob) (list (ly:grob-staff-position grob)))
+  d e
+}
Index: lily/ledger-line-spanner.cc
diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc
index 42d32b496af7bb5ec7a15f1b52cdbc4ea84959c8..9246cd0f62a710cafb89f3d484a72112b71fa360 100644
--- a/lily/ledger-line-spanner.cc
+++ b/lily/ledger-line-spanner.cc
@@ -211,10 +211,22 @@ Ledger_line_spanner::print (SCM smob)
   for (vsize i = heads.size (); i--;)
     {
       Item *h = dynamic_cast<Item *> (heads[i]);
-
       int pos = Staff_symbol_referencer::get_rounded_position (h);
-      vector<Real> ledger_positions =
-        Staff_symbol::ledger_positions (staff, pos);
+      vector<Real> ledger_positions;
+
+      // allow user to override ledger positions by note head grob
+      SCM posns = h->get_property ("ledger-positions");
+      if (scm_is_pair (posns))
+        {
+          int len = scm_to_int (scm_length (posns));
+          for (int p = 0; p < len; p++)
+            {
+              ledger_positions.push_back
+                (scm_to_double (scm_list_ref (posns, scm_from_int (p))));
+            }
+        }
+      else
+        ledger_positions = Staff_symbol::ledger_positions (staff, pos);

       // We work with all notes that produce ledgers and any notes that
       // fall outside the staff that do not produce ledgers, such as
Index: lily/note-head.cc
diff --git a/lily/note-head.cc b/lily/note-head.cc
index 33bbf339cafd9b431b83d2955522c2c8f91c1379..73a2255d9040a91199e994cf05c2fe0e6f9a74b5 100644
--- a/lily/note-head.cc
+++ b/lily/note-head.cc
@@ -211,5 +211,6 @@ ADD_INTERFACE (Note_head,
                "glyph-name "
                "stem-attachment "
                "style "
+               "ledger-positions "
               );

Index: scm/define-grob-properties.scm
diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm
index e54bdaf18386363be5afb59c7016051dedf88af2..dcf9705998236a2a78da8ae062fb62d003930731 100644
--- a/scm/define-grob-properties.scm
+++ b/scm/define-grob-properties.scm
@@ -575,8 +575,10 @@ lines for.")
 lines.  It is the sum of address@hidden: The first is the factor for
 line thickness, and the second for staff space.  Both contributions
 are added.")
-     (ledger-positions ,list? "Repeating pattern for the vertical positions
-of ledger lines.  Bracketed groups are always shown together.")
+     (ledger-positions ,list? "Vertical positions of ledger lines.
+When set on a @code{StaffSymbol} grob it defines a repeating
+pattern of ledger lines and any parenthesized groups will always be
+shown together.")
      (left-bound-info ,list? "An alist of properties for determining
 attachments of spanners to edges.")
      (left-padding ,ly:dimension? "The amount of space that is put





reply via email to

[Prev in Thread] Current Thread [Next in Thread]