+ if (skyline.is_empty ())
+ dy = 0.0;
+ else if (!last_nonempty_element)
+ dy = skyline[-stacking_dir].max_height () + padding;
+ else
+ {
+ SCM spec = Page_layout_problem::get_spacing_spec (last_nonempty_element, elems[j], pure, start, end);
+ Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding"));
+
+ dy = down_skyline.distance (skyline[-stacking_dir]) + padding;
+
+ Real spec_distance = 0;
+ if (Page_layout_problem::read_spacing_spec (spec, &spec_distance, ly_symbol2scm ("minimum-distance")))
+ dy = max (dy, spec_distance);
+ // Consider the likely final spacing when estimating distance between staves of the full score
+ if (INT_MAX == end && 0 == start
+ && Page_layout_problem::read_spacing_spec (spec, &spec_distance, ly_symbol2scm ("basic-distance")))
+ dy = max (dy, spec_distance);
+
+ if (include_fixed_spacing && Page_layout_problem::is_spaceable (elems[j]) && last_spaceable_element)
+ {
+ // Spaceable staves may have
+ // constraints coming from the previous spaceable staff
+ // as well as from the previous staff.
+ spec = Page_layout_problem::get_spacing_spec (last_spaceable_element, elems[j], pure, start, end);
+ Real spaceable_padding = 0;
+ Page_layout_problem::read_spacing_spec (spec,
+ &spaceable_padding,
+ ly_symbol2scm ("padding"));
+ dy = max (dy, (last_spaceable_skyline.distance (skyline[-stacking_dir])
+ + stacking_dir * (last_spaceable_element_pos - where) + spaceable_padding));
+
+ Real spaceable_min_distance = 0;
+ if (Page_layout_problem::read_spacing_spec (spec,
+ &spaceable_min_distance,
+ ly_symbol2scm ("minimum-distance")))
+ dy = max (dy, spaceable_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));
+ }
+ }
+
+ dy = max (0.0, dy);