From: Keith OHara Date: Sat, 24 Dec 2011 19:51:15 +0000 (-0800) Subject: page-layout-problem: break staff-affinity between systems (2102) X-Git-Tag: release/2.15.24-1~60 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=b794ce619da2d09661d0b8e873d2e54321f58aca;p=lilypond.git page-layout-problem: break staff-affinity between systems (2102) --- diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc index b21ee1e873..edf6eadc63 100644 --- a/lily/page-layout-problem.cc +++ b/lily/page-layout-problem.cc @@ -810,7 +810,12 @@ Page_layout_problem::find_system_offsets () if (staff_idx) loose_line_min_distances.push_back (min_offsets[staff_idx - 1] - min_offsets[staff_idx]); else - loose_line_min_distances.push_back (elements_[i].padding - min_offsets[staff_idx]); + { + // A null line to break any staff-affinity from the previous system + loose_line_min_distances.push_back (0.0); + loose_lines.push_back (0); + loose_line_min_distances.push_back (elements_[i].padding - min_offsets[0]); + } loose_lines.push_back (staff); distribute_loose_lines (loose_lines, loose_line_min_distances, @@ -839,12 +844,16 @@ Page_layout_problem::find_system_offsets () // this is the first line in a system Real min_dist = 0; if (loose_lines.back ()) - // distance to the final line in the preceding system, - // including 'system-system-spacing 'padding - min_dist = (Axis_group_interface::minimum_distance (loose_lines.back (), - staff, - Y_AXIS) - + elements_[i].padding); + { + // distance to the final line in the preceding system, + // including 'system-system-spacing 'padding + min_dist = (Axis_group_interface::minimum_distance (loose_lines.back (), + staff, Y_AXIS) + + elements_[i].padding); + // A null line to break any staff-affinity for the previous system + loose_line_min_distances.push_back (0.0); + loose_lines.push_back (0); + } else if (!last_title_extent.is_empty ()) // distance to the preceding title, // including 'markup-system-spacing 'padding @@ -910,10 +919,11 @@ Page_layout_problem::distribute_loose_lines (vector const &loose_lines, vector solution = spacer.spring_positions (); for (vsize i = 1; i + 1 < solution.size (); ++i) - { - Real system_offset = scm_to_double (loose_lines[i]->get_property ("system-Y-offset")); - loose_lines[i]->translate_axis (first_translation - solution[i] - system_offset, Y_AXIS); - } + if (loose_lines[i]) + { + Real system_offset = scm_to_double (loose_lines[i]->get_property ("system-Y-offset")); + loose_lines[i]->translate_axis (first_translation - solution[i] - system_offset, Y_AXIS); + } } SCM