]> git.donarmstrong.com Git - lilypond.git/commitdiff
Ledger-line-spanner: symmetric extents; issue 2493
authorKeith OHara <k-ohara5a5a@oco.net>
Tue, 28 Aug 2012 05:58:10 +0000 (22:58 -0700)
committerKeith OHara <k-ohara5a5a@oco.net>
Mon, 3 Sep 2012 05:39:24 +0000 (22:39 -0700)
input/regression/compound-time-signatures.ly
input/regression/tablature-full-notation.ly
lily/ledger-line-spanner.cc

index 0fb7730f4de32e81138975202e15f895427a5e30..48170ffcabfadd8609131fe046ef0339fdcfd3b0 100644 (file)
@@ -16,6 +16,7 @@ as @code{\\compoundMeter #'((3 2 8))} or shorter
 
 
 \relative c' {
+  \override Staff.TimeSignature #'break-visibility = #'#(#f #t #t)
   \compoundMeter #'(1 2 3 4 8)
   \repeat unfold 10 c8 \repeat unfold 20 c16 \break
 
index 2fbe808836f0bc365977b10a58ef9cb570d49174..a1acd8bc4ccc779fe15e0ad29977e12ee8f4b222 100644 (file)
@@ -27,6 +27,8 @@ tabstuff = {
   \bar "|."
 }
 
+#(set-global-staff-size 18)
+
 \score {
   <<
     \new Staff { \clef "G_8" \tabstuff }
index 114ddb3f02c0e5f98f314848cdae8d0be87495e2..d36f908b2c81d78aae69d3b1b8136500350b961d 100644 (file)
@@ -40,20 +40,15 @@ set_rods (Drul_array<Interval> const &current_extents,
           Drul_array<Interval> const &previous_extents,
           Item *current_column,
           Item *previous_column,
-          Real min_length_fraction)
+          Real min_length)
 {
-  Direction d = UP;
-  do
+  for (UP_and_DOWN (d))
     {
       if (!current_extents[d].is_empty ()
           && !previous_extents[d].is_empty ())
         {
-          Real total_head_length = previous_extents[d].length ()
-                                   + current_extents[d].length ();
-
           Rod rod;
-          rod.distance_ = total_head_length
-                          * (3 / 2 * min_length_fraction)
+          rod.distance_ = 2 * min_length
                           /*
                             we go from right to left.
                           */
@@ -65,7 +60,6 @@ set_rods (Drul_array<Interval> const &current_extents,
           rod.add_to_cols ();
         }
     }
-  while (flip (&d) != DOWN);
 }
 
 MAKE_SCHEME_CALLBACK (Ledger_line_spanner, set_spacing_rods, 1);
@@ -87,6 +81,7 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
 
   Drul_array<Interval> current_extents;
   Drul_array<Interval> previous_extents;
+  Real current_head_width = 0.0;
   Item *previous_column = 0;
   Item *current_column = 0;
 
@@ -108,12 +103,17 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
       if (staff_extent.contains (pos))
         continue;
 
+      /* Ambitus heads can appear out-of-order in heads[],
+       * but as part of prefatory matter, they need no rods */
+      if (h->internal_has_interface (ly_symbol2scm ("ambitus-interface")))
+        continue;
+
       Item *column = h->get_column ();
       if (current_column != column)
         {
           set_rods (current_extents, previous_extents,
                     current_column, previous_column,
-                    min_length_fraction);
+                    current_head_width * min_length_fraction);
 
           previous_column = current_column;
           current_column = column;
@@ -121,6 +121,7 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
 
           current_extents[DOWN].set_empty ();
           current_extents[UP].set_empty ();
+          current_head_width = 0.0;
         }
 
       Interval head_extent = h->extent (column, X_AXIS);
@@ -129,12 +130,13 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
         continue;
 
       current_extents[vdir].unite (head_extent);
+      current_head_width = max (current_head_width, head_extent.length ());
     }
 
   if (previous_column && current_column)
     set_rods (current_extents, previous_extents,
               current_column, previous_column,
-              min_length_fraction);
+              current_head_width * min_length_fraction);
 
   return SCM_UNSPECIFIED;
 }