]> git.donarmstrong.com Git - lilypond.git/commitdiff
Do skyline spacing in Y-extent, not after-breaking-callback. Otherwise if
authorJoe Neeman <joeneeman@gmail.com>
Tue, 21 Nov 2006 20:43:36 +0000 (22:43 +0200)
committerJoe Neeman <joeneeman@gmail.com>
Tue, 21 Nov 2006 20:43:36 +0000 (22:43 +0200)
Y-extent is called before after-breaking-callback, our Y-extent doesn't
reflect the shifted children.

lily/axis-group-interface.cc
lily/include/axis-group-interface.hh
scm/define-grobs.scm

index 366519948d7f8af610714e14f6b5dd1585d9456f..2821c38466fef9219c50b998f89a30c8a61d463a 100644 (file)
@@ -184,6 +184,8 @@ SCM
 Axis_group_interface::generic_group_extent (Grob *me, Axis a)
 {
   extract_grob_set (me, "elements", elts);
+  if (a == Y_AXIS)
+    skyline_spacing (me, elts);
   Grob *common = common_refpoint_of_array (elts, me, a);
 
   Real my_coord = me->relative_coordinate (common, a);
@@ -270,22 +272,19 @@ staff_priority_less (Grob * const &g1, Grob * const &g2)
   return rank_1 < rank_2;
 }
 
-MAKE_SCHEME_CALLBACK (Axis_group_interface, skyline_spacing, 1)
-SCM
-Axis_group_interface::skyline_spacing (SCM smob)
+void
+Axis_group_interface::skyline_spacing (Grob *me, vector<Grob*> elements)
 {
-  Grob *me = unsmob_grob (smob);
-  extract_grob_set (me, "elements", ro_elements);
-  vector<Grob*> elements (ro_elements);
   vector_sort (elements, staff_priority_less);
   Grob *x_common = common_refpoint_of_array (elements, me, X_AXIS);
+  Grob *y_common = common_refpoint_of_array (elements, me, Y_AXIS);
 
   vsize i = 0;
   vector<Box> boxes;
   for (i = 0; i < elements.size ()
         && !scm_is_number (elements[i]->get_property ("outside-staff-priority")); i++)
     boxes.push_back (Box (elements[i]->extent (x_common, X_AXIS),
-                         elements[i]->extent (me, Y_AXIS)));
+                         elements[i]->extent (y_common, Y_AXIS)));
 
   Drul_array<Skyline> skylines (Skyline (boxes, X_AXIS, DOWN),
                                Skyline (boxes, X_AXIS, UP));
@@ -299,7 +298,7 @@ Axis_group_interface::skyline_spacing (SCM smob)
        }
 
       Box b (elements[i]->extent (x_common, X_AXIS),
-            elements[i]->extent (me, Y_AXIS));
+            elements[i]->extent (y_common, Y_AXIS));
       boxes.clear ();
       boxes.push_back (b);
       Skyline other = Skyline (boxes, X_AXIS, -dir);
@@ -312,7 +311,6 @@ Axis_group_interface::skyline_spacing (SCM smob)
        }
       skylines[dir].insert (b, X_AXIS);
     }
-  return SCM_UNSPECIFIED;
 }
 
 ADD_INTERFACE (Axis_group_interface, "axis-group-interface",
index 3f1dbb407dbdc02fafdc397dfb50c31384a09f3f..b1bd975454aa1e811e90925cde04061d0c869bfd 100644 (file)
@@ -22,7 +22,6 @@ struct Axis_group_interface
   DECLARE_SCHEME_CALLBACK (width, (SCM smob));
   DECLARE_SCHEME_CALLBACK (height, (SCM smob));
   DECLARE_SCHEME_CALLBACK (pure_height, (SCM smob, SCM start, SCM end));
-  DECLARE_SCHEME_CALLBACK (skyline_spacing, (SCM smob));
   static Interval relative_group_extent (vector<Grob*> const &list,
                                         Grob *common, Axis);
   static Interval relative_pure_height (Grob *me, vector<Grob*> const &list,
@@ -31,6 +30,7 @@ struct Axis_group_interface
   static Interval cached_pure_height (Grob *me, vector<Grob*> const &list,
                                      Grob *common, int, int);
 
+  static void skyline_spacing (Grob *me, vector<Grob*> elements);
   static void add_element (Grob *me, Grob *);
   static void set_axes (Grob *, Axis, Axis);
   static bool has_axis (Grob *, Axis);
index 46dc0e3ee693741428a615a3f8e350e0fe64bbc2..3b8dd7abbce2e17335990f1f20801afacf8f6a35 100644 (file)
        (axes . (0 1))
        (X-extent . ,ly:axis-group-interface::width)
        (Y-extent . ,ly:axis-group-interface::height)
-       (after-line-breaking . ,ly:axis-group-interface::skyline-spacing)
        (meta . ((class . System)
                 (interfaces . (system-interface
                                axis-group-interface))))))
        (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback)
        (Y-extent . ,ly:hara-kiri-group-spanner::y-extent)
        (X-extent . ,ly:axis-group-interface::width)
-       (after-line-breaking . ,ly:axis-group-interface::skyline-spacing)
        (meta . ((class . Spanner)
                 (interfaces . (axis-group-interface
                                hara-kiri-group-interface