]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/align-interface.cc
Merge branch 'master' of ssh+git://hanwen@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / align-interface.cc
index 69fb5e921c3a56f4efd3867493d75fb2cf0b8840..786e91010bf00c10c9958306893a4caf72ab0588 100644 (file)
@@ -30,6 +30,9 @@ SCM
 Align_interface::calc_positioning_done (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
+
+  me->set_property ("positioning-done", SCM_BOOL_T);
+
   SCM axis = scm_car (me->get_property ("axes"));
   Axis ax = Axis (scm_to_int (axis));
 
@@ -41,7 +44,7 @@ Align_interface::calc_positioning_done (SCM smob)
 /*
   TODO: This belongs to the old two-pass spacing. Delete me.
 */
-MAKE_SCHEME_CALLBACK(Align_interface, stretch_after_break, 1)
+MAKE_SCHEME_CALLBACK (Align_interface, stretch_after_break, 1)
 SCM
 Align_interface::stretch_after_break (SCM grob)
 {
@@ -68,7 +71,7 @@ Align_interface::stretch_after_break (SCM grob)
 
       Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
                                               DOWN);
-      Real delta  = extra_space / elems.size() * stacking_dir;
+      Real delta  = extra_space / elems.size () * stacking_dir;
       for (vsize i = 0; i < elems.size (); i++)
        elems[i]->translate_axis (i * delta, Y_AXIS);
     }
@@ -205,15 +208,21 @@ Align_interface::get_extents_aligned_translates (Grob *me,
 
   Real padding = robust_scm2double (me->get_property ("padding"), 0.0);
   vector<Real> translates;
+  Skyline down_skyline (stacking_dir);
   for (vsize j = 0; j < elems.size (); j++)
     {
       Real dy = 0;
       if (j == 0)
        dy = skylines[j][-stacking_dir].max_height ();
       else
-       dy = skylines[j-1][stacking_dir].distance (skylines[j][-stacking_dir]);
+       {
+         down_skyline.merge (skylines[j-1][stacking_dir]);
+         dy = down_skyline.distance (skylines[j][-stacking_dir]);
+       }
 
-      where += stacking_dir * max (0.0, dy + padding + extra_space / elems.size ());
+      dy = max (0.0, dy + padding + extra_space / elems.size ());
+      down_skyline.raise (-stacking_dir * dy);
+      where += stacking_dir * dy;
       translates.push_back (where);
     }