]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/axis-group-interface.cc
Merge branch 'master' of ssh://kainhofer@git.sv.gnu.org/srv/git/lilypond into kainhofer
[lilypond.git] / lily / axis-group-interface.cc
index 291c799910e56d6f8109adc593597ac5275ced02..0a82fe67131c859afd8aa95ad3df752877fb62d6 100644 (file)
@@ -97,7 +97,7 @@ Axis_group_interface::cached_pure_height (Grob *me, int start, int end)
   for (vsize i = 0; i + 1 < breaks.size (); i++)
     {
       int r = Paper_column::get_rank (cols[breaks[i]]);
-      if (r > end)
+      if (r >= end)
        break;
 
       if (r >= start)
@@ -194,7 +194,8 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end)
 
       if (rank > end)
        break;
-      else if (rank >= start && it->pure_is_visible (start, end))
+      else if (rank >= start && it->pure_is_visible (start, end)
+              && !to_boolean (it->get_property ("cross-staff")))
        {
          Interval dims = it->pure_height (common, start, end);
          if (!dims.is_empty ())
@@ -205,7 +206,8 @@ Axis_group_interface::relative_pure_height (Grob *me, int start, int end)
   for (vsize i = 0; i < spanners.size (); i++)
     {
       Interval_t<int> rank_span = spanners[i]->spanned_rank_interval ();
-      if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start)
+      if (rank_span[LEFT] <= end && rank_span[RIGHT] >= start
+         && !to_boolean (spanners[i]->get_property ("cross-staff")))
        {
          Interval dims = spanners[i]->pure_height (common, start, end);
          if (!dims.is_empty ())
@@ -261,13 +263,6 @@ Axis_group_interface::calc_skylines (SCM smob)
   extract_grob_set (me, "elements", elts);
   Skyline_pair skylines = skyline_spacing (me, elts);
 
-  /* add a minimum-Y-extent-sized box to the skyline */
-  SCM min_y_extent = me->get_property ("minimum-Y-extent");
-  if (is_number_pair (min_y_extent))
-    {
-      Box b (me->extent (me, X_AXIS), ly_scm2interval (min_y_extent));
-      skylines.insert (b, 0, X_AXIS);
-    }
   return skylines.smobbed_copy ();
 }
 
@@ -321,6 +316,22 @@ Axis_group_interface::generic_group_extent (Grob *me, Axis a)
   return ly_interval2scm (r - my_coord);
 }
 
+/* This is like generic_group_extent, but it only counts the grobs that
+   are children of some other axis-group. This is uncached; if it becomes
+   commonly used, it may be necessary to cache it somehow. */
+Interval
+Axis_group_interface::staff_extent (Grob *me, Grob *refp, Axis ext_a, Grob *staff, Axis parent_a)
+{
+  extract_grob_set (me, "elements", elts);
+  vector<Grob*> new_elts;
+
+  for (vsize i = 0; i < elts.size (); i++)
+    if (elts[i]->common_refpoint (staff, parent_a) == staff)
+      new_elts.push_back (elts[i]);
+
+  return relative_group_extent (new_elts, refp, ext_a);
+}
+
 
 Grob *
 Axis_group_interface::calc_pure_elts_and_common (Grob *me)