]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/staff-spacing.cc
Run `make grand-replace'.
[lilypond.git] / lily / staff-spacing.cc
index 83e7f6167d8e3759296fe3435dbcb4abe26eb0fc..4e92bfce649282b51dc61a12bfa015b2ace7096a 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2001--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 2001--2008  Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "staff-spacing.hh"
@@ -108,34 +108,21 @@ Staff_spacing::next_notes_correction (Grob *me,
 }
 
 /* We calculate three things here: the ideal distance, the minimum distance
-   (which is the distance at which collisions will occure) and the "fixed"
+   (which is the distance at which collisions will occur) and the "fixed"
    distance, which is the distance at which things start to look really bad.
    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)
 {
-  Grob *separation_item = 0;
   Item *me_item = dynamic_cast<Item *> (me);
-
-  extract_grob_set (me, "left-items", items);
-  for (vsize i = items.size (); i--;)
-    {
-      Grob *cand = items[i];
-      if (cand && Separation_item::has_interface (cand))
-       separation_item = cand;
-    }
-
-  //  printf ("doing col %d\n" , Paper_column::get_rank (left_col));
-  if (!separation_item)
-    {
-      programming_error ("no sep item");
-      return Spring ();
-    }
+  Grob *left_col = me_item->get_column ();
 
   Interval last_ext;
-  Grob *last_grob = Separation_item::extremal_break_aligned_grob (separation_item, RIGHT,
-                                                                 &last_ext);
+  Direction break_dir = me_item->break_status_dir ();
+  Grob *last_grob = Spacing_interface::extremal_break_aligned_grob (me, LEFT,
+                                                                   break_dir,
+                                                                   &last_ext);
   if (!last_grob)
     {
       /*
@@ -197,8 +184,9 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col)
       ideal = fixed;
     }
 
+
   Real optical_correction = next_notes_correction (me, last_grob);
-  Real min_dist = Spacing_interface::minimum_distance (me, right_col);
+  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);
@@ -208,14 +196,14 @@ Staff_spacing::get_spacing (Grob *me, Grob *right_col)
   ideal += correction;
 
   Spring ret (ideal, min_dist);
-  ret.set_inverse_stretch_strength (ideal - fixed);
+  ret.set_inverse_stretch_strength (max (0.0, ideal - fixed));
   return ret;
 }
 
 ADD_INTERFACE (Staff_spacing,
-              "This object calculates spacing details from a "
-              " breakable symbol (left) to another object. For example, it takes care "
-              " of  optical spacing from  a bar lines to a note.",
+              "This object calculates spacing details from a breakable"
+              " symbol (left) to another object.  For example, it takes care"
+              " of optical spacing from a bar line to a note.",
 
               /* properties */
               "stem-spacing-correction "