return internal_get_minimum_translations (me, all_grobs, a, false, false, 0, 0);
}
-// If include_fixed_spacing is true, the manually fixed spacings
-// induced by stretchable=0 or alignment-distances are included
-// in the minimum translations here. If you want to find the minimum
-// height of a system, include_fixed_spacing should be true. If you
-// want to actually lay out the page, then it should be false (or
-// else centered dynamics will break when there is a fixed alignment).
+// If include_fixed_spacing is false, the only constraints that will be measured
+// here are those that result from collisions (+ padding). That is, all
+// minimum-distances, line-break-system-details, basic-distance+stretchable=0
+// constraints will be ignored.
+// - If you want to find the minimum height of a system, include_fixed_spacing should be true.
+// - If you're going to actually lay out the page, then it should be false (or
+// else centered dynamics will break when there is a fixed alignment).
vector<Real>
Align_interface::internal_get_minimum_translations (Grob *me,
vector<Grob*> const &all_grobs,
SCM spec = Page_layout_problem::get_spacing_spec (elems[j-1], elems[j], pure, start, end);
Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding"));
- Real min_distance = 0;
- if (Page_layout_problem::read_spacing_spec (spec, &min_distance, ly_symbol2scm ("minimum-distance")))
- dy = max (dy, min_distance);
-
if (include_fixed_spacing)
- dy = max (dy, Page_layout_problem::get_fixed_spacing (elems[j-1], elems[j], spaceable_count, pure, start, end));
+ {
+ Real min_distance = 0;
+ if (Page_layout_problem::read_spacing_spec (spec, &min_distance, ly_symbol2scm ("minimum-distance")))
+ dy = max (dy, min_distance);
+
+ dy = max (dy, Page_layout_problem::get_fixed_spacing (elems[j-1], elems[j], spaceable_count, pure, start, end));
+ }
if (Page_layout_problem::is_spaceable (elems[j]) && last_spaceable_element)
{
ly_symbol2scm ("padding"));
padding = max (padding, spaceable_padding);
- Real min_distance = 0;
- if (Page_layout_problem::read_spacing_spec (spec,
- &min_distance,
- ly_symbol2scm ("minimum-distance")))
- dy = max (dy, min_distance + stacking_dir*(last_spaceable_element_pos - where));
-
if (include_fixed_spacing)
- dy = max (dy, Page_layout_problem::get_fixed_spacing (last_spaceable_element, elems[j], spaceable_count,
- pure, start, end));
+ {
+ Real min_distance = 0;
+ if (Page_layout_problem::read_spacing_spec (spec,
+ &min_distance,
+ ly_symbol2scm ("minimum-distance")))
+ dy = max (dy, min_distance + stacking_dir*(last_spaceable_element_pos - where));
+
+ dy = max (dy, Page_layout_problem::get_fixed_spacing (last_spaceable_element, elems[j], spaceable_count,
+ pure, start, end));
+ }
}
}
loose_line_min_distances.clear ();
}
last_spaceable_line = staff;
- // Negative is down but the translation is relative to the whole page.
- last_spaceable_line_translation = -system_position + translation;
+ last_spaceable_line_translation = -solution_[spring_idx - 1];
staff->translate_axis (translation, Y_AXIS);
found_spaceable_staff = true;
loose_lines.push_back (last_spaceable_line);
if (staff_idx)
+ // NOTE: the way we do distances between loose lines (and other lines too, actually)
+ // is not the most accurate way possible: we only insert rods between adjacent
+ // lines. To be more accurate, we could insert rods between non-adjacent lines
+ // using a scheme similar to the one in set_column_rods.
loose_line_min_distances.push_back (min_offsets[staff_idx-1] - min_offsets[staff_idx]);
else
{