]> git.donarmstrong.com Git - lilypond.git/commitdiff
Avoid redundant space in note spacing; issue 1779
authorKeith OHara <k-ohara5a5a@oco.net>
Thu, 28 Jul 2011 00:32:25 +0000 (17:32 -0700)
committerKeith OHara <k-ohara5a5a@oco.net>
Sun, 21 Aug 2011 18:59:45 +0000 (11:59 -0700)
ly/staff-spacing.cc: don't increase ideal distance if the ideal
distance gives sufficient clearance.

ly/spacing-spanner.cc: compute total spring length before checking
clearances.

input/regression/spacing-bar-accidental.ly
lily/include/staff-spacing.hh
lily/spacing-determine-loose-columns.cc
lily/spacing-spanner.cc
lily/staff-spacing.cc
scm/define-grobs.scm

index b3087d4ddda5aac3acecdeb7a1546dd295b7cf82..75db12af2618a815bf4c1b816a0b97b4167f8267 100644 (file)
@@ -1,7 +1,7 @@
 
 \header {
   texidoc = "An accidental following a bar gets space so
- the left edge of the acc is at 0.3 - 0.6 staff space of the bar line"
+ the left edge of the acc is at 0.3 staff space from the bar line"
 }
 
 
index 935bcf5b8326f75e0e826bba7ba19b089f19db76..b404e35d5e240b134affbf9925fbc5ac6c9ce43a 100644 (file)
@@ -31,7 +31,7 @@ class Staff_spacing
 
 public:
   DECLARE_GROB_INTERFACE ();
-  static Spring get_spacing (Grob *, Grob *right_col);
+  static Spring get_spacing (Grob *, Grob *, Real);
   static Interval bar_y_positions (Grob *);
 };
 
index 79551ecac37d5d06aaed4ea40175c413179a1ae2..99d9e596af48f0a6a8136c685dd0eded457292b8 100644 (file)
@@ -163,7 +163,7 @@ Spacing_spanner::set_distances_for_loose_col (Grob *me, Grob *c,
             }
           else if (Staff_spacing::has_interface (sp))
             {
-              Spring spring = Staff_spacing::get_spacing (sp, rc);
+              Spring spring = Staff_spacing::get_spacing (sp, rc, 0.0);
 
               dists[d] = max (dists[d], spring.min_distance ());
             }
index 75dc166925eb5a2e6ab1d9057688eb277548c4d8..b09384f7df1f03d11744e097909cb4f471a48805 100644 (file)
@@ -495,6 +495,12 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
   vector<Spring> springs;
   Spring spring;
 
+  Real full_measure_space = 0.0;
+  if (Paper_column::is_musical (r)
+      && l->break_status_dir () == CENTER
+      && fills_measure (me, l, r))
+    full_measure_space = robust_scm2double (l->get_property ("full-measure-extra-space"), 1.0);
+
   Moment dt = Paper_column::when_mom (r) - Paper_column::when_mom (l);
 
   if (dt == Moment (0, 0))
@@ -514,7 +520,8 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
           */
           assert (spacing_grob->get_column () == l);
 
-          springs.push_back (Staff_spacing::get_spacing (spacing_grob, r));
+          springs.push_back (Staff_spacing::get_spacing (spacing_grob, r,
+                                                         full_measure_space));
         }
     }
 
@@ -533,15 +540,6 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
       spring *= 0.8;
     }
 
-  if (Paper_column::is_musical (r)
-      && l->break_status_dir () == CENTER
-      && fills_measure (me, l, r))
-    {
-      Real full_measure_extra_space = robust_scm2double (l->get_property ("full-measure-extra-space"), 1.0);
-      spring.set_distance (spring.distance () + full_measure_extra_space);
-      spring.set_default_compress_strength ();
-    }
-
   if (options->stretch_uniformly_ && l->break_status_dir () != RIGHT)
     {
       spring.set_min_distance (0.0);
index 58cfa4125ba1fec2e19e4c760737af24f86aaf8d..00c9abd6dcf16828c55241e997bcb6da2c319bad 100644 (file)
@@ -124,7 +124,7 @@ Staff_spacing::next_notes_correction (Grob *me,
    We arrange things so that the fixed distance will be attained when the
    line is compressed with a force of 1.0 */
 Spring
-Staff_spacing::get_spacing (Grob *me, Grob *right_col)
+Staff_spacing::get_spacing (Grob *me, Grob *right_col, Real situational_space)
 {
   Item *me_item = dynamic_cast<Item *> (me);
   Grob *left_col = me_item->get_column ();
@@ -195,18 +195,25 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col)
       ideal = fixed;
     }
 
+  Real stretchability = ideal - fixed;
+
+  /* 'situational_space' passed by the caller
+      could include full-measure-extra-space */
+  ideal += situational_space;
+
   Real optical_correction = next_notes_correction (me, last_grob);
+  fixed += optical_correction;
+  ideal += optical_correction;
+
   Real min_dist = Paper_column::minimum_distance (left_col, right_col);
 
   /* ensure that the "fixed" distance will leave a gap of at least 0.3 ss. */
   Real min_dist_correction = max (0.0, 0.3 + min_dist - fixed);
-  Real correction = max (optical_correction, min_dist_correction);
-
-  fixed += correction;
-  ideal += correction;
+  fixed += min_dist_correction;
+  ideal = max (ideal, fixed);
 
   Spring ret (ideal, min_dist);
-  ret.set_inverse_stretch_strength (max (0.0, ideal - fixed));
+  ret.set_inverse_stretch_strength (max (0.0, stretchability));
   return ret;
 }
 
index 6a482d102d18ce9634ffc03fc224689cc5f37706..680f1598af68a6e07181e61d16b490e6e34c128d 100644 (file)
                        (key-signature . (minimum-space . 3.5))
                        (time-signature . (minimum-space . 4.2))
                        (first-note . (minimum-fixed-space . 5.0))
-                       (next-note . (extra-space . 0.5))
+                       (next-note . (extra-space . 1.0))
                        (right-edge . (extra-space . 0.5))))
        (stencil . ,ly:clef::print)
        (Y-offset . ,ly:staff-symbol-referencer::callback)
                        (time-signature . (minimum-space . 4.2))
                        (custos . (minimum-space . 0.0))
                        (first-note . (minimum-fixed-space . 3.0))
-                       (next-note . (extra-space . 0.5))
+                       (next-note . (extra-space . 1.0))
                        (right-edge . (extra-space . 0.5))))
        (stencil . ,ly:clef::print)
        (Y-offset . ,ly:staff-symbol-referencer::callback)
                        (key-signature . (minimum-space . 3.5))
                        (time-signature . (minimum-space . 4.2))
                        (first-note . (minimum-fixed-space . 5.0))
-                       (next-note . (extra-space . 0.5))
+                       (next-note . (extra-space . 1.0))
                        (right-edge . (extra-space . 0.5))))
        (stencil . ,ly:clef::print)
        (Y-offset . ,ly:staff-symbol-referencer::callback)
        (fret-diagram-details . ((finger-code . below-string)))
        (stencil . ,fret-board::calc-stencil)
        (extra-spacing-height . (0.2 . -0.2))
+       (extra-spacing-width . (-0.5 . 0.5))
        (meta . ((class . Item)
                 (interfaces . (chord-name-interface
                                font-interface