#include "output-def.hh"
#include "paper-book.hh"
#include "paper-column.hh"
+#include "paper-score.hh"
#include "pointer-group-interface.hh"
#include "prob.hh"
#include "skyline-pair.hh"
Spring spring (0, 0);
Real padding = 0.0;
+ Real indent = line_dimensions_int (sys->paper_score ()->layout (), sys->get_rank ())[LEFT];
alter_spring_from_spacing_spec (spec, &spring);
read_spacing_spec (spec, &padding, ly_symbol2scm ("padding"));
- append_system (sys, spring, padding);
+ append_system (sys, spring, indent, padding);
last_system_was_title = false;
}
else if (Prob *p = unsmob_prob (scm_car (s)))
}
void
-Page_layout_problem::append_system (System *sys, Spring const& spring, Real padding)
+Page_layout_problem::append_system (System *sys, Spring const& spring, Real indent, Real padding)
{
Grob *align = sys->get_vertical_alignment ();
if (!align)
extract_grob_set (align, "elements", all_elts);
vector<Grob*> elts = filter_dead_elements (all_elts);
vector<Real> minimum_offsets = Align_interface::get_minimum_translations_without_min_dist (align, elts, Y_AXIS);
+ vector<Real> minimum_offsets_with_min_dist = Align_interface::get_minimum_translations (align, elts, Y_AXIS);
Skyline up_skyline (UP);
Skyline down_skyline (DOWN);
- build_system_skyline (elts, minimum_offsets, &up_skyline, &down_skyline);
+ build_system_skyline (elts, minimum_offsets_with_min_dist, &up_skyline, &down_skyline);
+ up_skyline.shift (indent);
+ down_skyline.shift (indent);
Real minimum_distance = up_skyline.distance (bottom_skyline_) + padding;
solution_ = spacer.spring_positions ();
if (!spacer.fits ())
- warning (_f ("couldn't fit music on page: overflow is %f",
- spacer.configuration_length(spacer.force()) - page_height_));
+ {
+ Real overflow = spacer.configuration_length (spacer.force ()) - page_height_;
+ vsize space_count = solution_.size ();
+ for (vsize i = 0; i < space_count; i++)
+ solution_[i] -= (i + 1) * overflow / space_count;
+ warning (_f ("couldn't fit music on page: overflow is %f",
+ overflow));
+ warning (_ ("compressing music to fit"));
+ }
}
// The solution_ vector stores the position of every live VerticalAxisGroup