]> git.donarmstrong.com Git - lilypond.git/commitdiff
page-layout-problem: break staff-affinity between systems (2102)
authorKeith OHara <k-ohara5a5a@oco.net>
Sat, 24 Dec 2011 19:51:15 +0000 (11:51 -0800)
committerKeith OHara <k-ohara5a5a@oco.net>
Sat, 24 Dec 2011 19:51:15 +0000 (11:51 -0800)
lily/page-layout-problem.cc

index b21ee1e87367a2b063133831eaf4ab0d93efbda9..edf6eadc63762e4d2c0d9e9f3a1da75eed1f09ea 100644 (file)
@@ -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<Grob *> const &loose_lines,
 
   vector<Real> 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