lilypond-devel
[Top][All Lists]
Advanced

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

Allow independent adjustment of minimum length for spanner siblings (iss


From: david . nalesnik
Subject: Allow independent adjustment of minimum length for spanner siblings (issue 201140043 by address@hidden)
Date: Thu, 05 Feb 2015 21:55:45 +0000

Reviewers: ,

Message:
Please review.

Description:
Allow independent adjustment of minimum length for spanner siblings

The property minimum-length affects both unbroken and broken spanners,
making
independent adjustment impossible.  This patch adds a property,
minimum-length-after-break, which, if set, behaves similarly to
minimum-length,
but only affects siblings starting a line.  If
minimum-length-after-break is
unset, minimum-length still controls all lengths.

A regtest demonstrates usage of the new property with a number of
spanners.

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

Affected files (+56, -1 lines):
  A input/regression/minimum-length-after-break.ly
  M lily/spanner.cc
  M scm/define-grob-properties.scm


Index: input/regression/minimum-length-after-break.ly
diff --git a/input/regression/minimum-length-after-break.ly b/input/regression/minimum-length-after-break.ly
new file mode 100644
index 0000000000000000000000000000000000000000..80c3f019afbca5523a5dae2a412b05529c15a69a
--- /dev/null
+++ b/input/regression/minimum-length-after-break.ly
@@ -0,0 +1,45 @@
+\version "2.19.16"
+
+\header {
+  texidoc = "The property @code{minimum-length-after-break} can be
+used to stretch broken spanners starting after a line break.  The
+following example shows usage for a variety of spanners.
+"
+}
+
+\layout {
+  ragged-right = ##t
+}
+
+{
+  \override Tie.minimum-length-after-break = 20
+  a1~
+  \break
+  a1
+
+  \override Slur.minimum-length-after-break = 20
+  a1(
+  \break
+  d'1)
+
+  \override TextSpanner.springs-and-rods = #ly:spanner::set-spacing-rods
+  \override TextSpanner.minimum-length-after-break = 20
+  a1\startTextSpan
+  \break
+  a1\stopTextSpan
+
+  \override Hairpin.after-line-breaking = ##t
+  \override Hairpin.to-barline = ##f
+  \override Hairpin.minimum-length-after-break = 20
+  a1\<
+  \break
+  a1\!
+
+  \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
+  \override Glissando.breakable = ##t
+  \override Glissando.after-line-breaking = ##t
+  \override Glissando.minimum-length-after-break = 20
+  a1\glissando
+  \break
+  d'1
+}
Index: lily/spanner.cc
diff --git a/lily/spanner.cc b/lily/spanner.cc
index 66b35dcd1b8b53df0438bcccddc62b96be71b134..bb0e78b02236c0aee834311eca82f54cd12a4722 100644
--- a/lily/spanner.cc
+++ b/lily/spanner.cc
@@ -366,7 +366,9 @@ Spanner::set_spacing_rods (SCM smob)
 {
   Grob *me = Grob::unsmob (smob);
   SCM num_length = me->get_property ("minimum-length");
-  if (scm_is_number (num_length))
+  SCM broken_length = me->get_property ("minimum-length-after-break");
+  if (scm_is_number (num_length)
+     || scm_is_number (broken_length))
     {
       Rod r;
       Spanner *sp = dynamic_cast<Spanner *> (me);
@@ -389,6 +391,8 @@ Spanner::set_spacing_rods (SCM smob)

           r.item_drul_[LEFT] = cols.back ()->find_prebroken_piece (RIGHT);
           r.item_drul_[RIGHT] = sp->get_bound (RIGHT);
+          if (scm_is_number (broken_length))
+            r.distance_ = robust_scm2double (broken_length, 0);
           r.add_to_cols ();
         }

@@ -546,6 +550,7 @@ ADD_INTERFACE (Spanner,
                /* properties */
                "normalized-endpoints "
                "minimum-length "
+               "minimum-length-after-break "
                "spanner-broken "
                "spanner-id "
                "to-barline "
Index: scm/define-grob-properties.scm
diff --git a/scm/define-grob-properties.scm b/scm/define-grob-properties.scm
index 0d5eaa124a001d875af1f3f7019e34df1dd8e60d..92742f98d05d51c64ca2469c9b165a66e98d4b9a 100644
--- a/scm/define-grob-properties.scm
+++ b/scm/define-grob-properties.scm
@@ -637,6 +637,11 @@ this long, normally in the horizontal direction. This requires an
 appropriate callback for the @code{springs-and-rods} property.  If
 added to a @code{Tie}, this sets the minimum distance between
 noteheads.")
+     (minimum-length-after-break ,ly:dimension? "If set, try to make
+a broken spanner starting a line this long.  This requires an
+appropriate callback for the @code{springs-and-rods} property.  If
+added to a @code{Tie}, this sets the minimum distance to the
+notehead.")
      (minimum-length-fraction ,number? "Minimum length of ledger line
 as fraction of note head size.")
      (minimum-space ,ly:dimension? "Minimum distance that the victim





reply via email to

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