return me->get_property ("default-next-staff-spacing");
}
+Real
+Axis_group_interface::minimum_distance (Grob *g1, Grob *g2, Axis a)
+{
+ SCM sym = ly_symbol2scm ((a == Y_AXIS) ? "vertical-skylines" : "horizontal-skylines");
+
+ Skyline_pair *s1 = Skyline_pair::unsmob (g1->get_property (sym));
+ Skyline_pair *s2 = Skyline_pair::unsmob (g2->get_property (sym));
+ if (s1 && s2)
+ return (*s1)[DOWN].distance ((*s2)[UP]);
+ return 0;
+}
+
ADD_INTERFACE (Axis_group_interface,
"An object that groups other layout objects.",
static void get_children (Grob *, vector<Grob*> *);
static Interval staff_extent (Grob *me, Grob *ref, Axis, Grob *staff, Axis);
static SCM calc_common (Grob *, Axis);
+ static Real minimum_distance (Grob*, Grob*, Axis);
DECLARE_GROB_INTERFACE();
};
#include "page-layout-problem.hh"
#include "align-interface.hh"
+#include "axis-group-interface.hh"
#include "hara-kiri-group-spanner.hh"
#include "international.hh"
#include "item.hh"
if (staff_idx)
loose_line_min_distances.push_back (min_offsets[staff_idx-1] - min_offsets[staff_idx]);
else
- // FIXME: this should reflect the min distance from the last staff
- // to the first loose line of this staff.
- loose_line_min_distances.push_back (0);
+ {
+ Real min_dist = 0;
+ if (last_spaceable_line)
+ min_dist = Axis_group_interface::minimum_distance (last_spaceable_line,
+ staff,
+ Y_AXIS);
+ else // distance to the top margin
+ min_dist = header_height_ + staff->extent (staff, Y_AXIS)[UP];
+
+ loose_line_min_distances.push_back (min_dist);
+ }
}
}
if (loose_lines.size ())
{
- loose_line_min_distances.push_back (0); // FIXME: should be the min distance to the footer.
+ Grob *last = loose_lines.back ();
+ Interval last_ext = last->extent (last, Y_AXIS);
+ loose_line_min_distances.push_back (-last_ext[DOWN] + footer_height_);
loose_lines.push_back (0);
distribute_loose_lines (loose_lines, loose_line_min_distances,