X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpage-layout-problem.cc;h=1aa83d3c0b222a9a05dcc8d0efdea51dccd9b802;hb=74fbafa9ebed0cc66de56dec3ca01634f8ddc94d;hp=fb9e27d12bb95f8bf5faa1561af1a5acabf7334d;hpb=4cabd2305eda952e2d29e4a04e75e1cfb499257a;p=lilypond.git diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc index fb9e27d12b..1aa83d3c0b 100644 --- a/lily/page-layout-problem.cc +++ b/lily/page-layout-problem.cc @@ -16,6 +16,7 @@ #include "item.hh" #include "output-def.hh" #include "paper-book.hh" +#include "paper-column.hh" #include "pointer-group-interface.hh" #include "prob.hh" #include "skyline-pair.hh" @@ -47,36 +48,38 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst bottom_skyline_.set_minimum_height (-header_height_); SCM between_system_spacing = SCM_EOL; + SCM between_scores_system_spacing = SCM_EOL; SCM after_title_spacing = SCM_EOL; SCM before_title_spacing = SCM_EOL; SCM between_title_spacing = SCM_EOL; - // first_system_spacing controls the spring from the top of the printable + // top_system_spacing controls the spring from the top of the printable // area to the first staff. It allows the user to control the offset of // the first staff (as opposed to the top of the first system) from the - // top of the page. Similarly for last_system_spacing. - SCM first_system_spacing = SCM_EOL; - SCM last_system_spacing = SCM_EOL; + // top of the page. Similarly for bottom_system_spacing. + SCM top_system_spacing = SCM_EOL; + SCM bottom_system_spacing = SCM_EOL; if (pb && pb->paper_) { Output_def *paper = pb->paper_; between_system_spacing = paper->c_variable ("between-system-spacing"); + between_scores_system_spacing = paper->c_variable ("between-scores-system-spacing"); after_title_spacing = paper->c_variable ("after-title-spacing"); before_title_spacing = paper->c_variable ("before-title-spacing"); between_title_spacing = paper->c_variable ("between-title-spacing"); - last_system_spacing = paper->c_variable ("last-system-spacing"); - first_system_spacing = paper->c_variable ("first-system-spacing"); + bottom_system_spacing = paper->c_variable ("bottom-system-spacing"); + top_system_spacing = paper->c_variable ("top-system-spacing"); if (scm_is_pair (systems) && unsmob_prob (scm_car (systems))) - first_system_spacing = paper->c_variable ("first-system-title-spacing"); + top_system_spacing = paper->c_variable ("top-title-spacing"); // Note: the page height here does _not_ reserve space for headers and - // footers. This is because we want to anchor the first-system-spacing + // footers. This is because we want to anchor the top-system-spacing // spring at the _top_ of the header. page_height_ -= robust_scm2double (paper->c_variable ("top-margin"), 0) + robust_scm2double (paper->c_variable ("bottom-margin"), 0); - read_spacing_spec (first_system_spacing, &header_padding_, ly_symbol2scm ("padding")); - read_spacing_spec (last_system_spacing, &footer_padding_, ly_symbol2scm ("padding")); + read_spacing_spec (top_system_spacing, &header_padding_, ly_symbol2scm ("padding")); + read_spacing_spec (bottom_system_spacing, &footer_padding_, ly_symbol2scm ("padding")); } bool last_system_was_title = false; @@ -94,8 +97,14 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst continue; } - SCM spec = first ? first_system_spacing - : (last_system_was_title ? after_title_spacing : between_system_spacing); + SCM spec = between_system_spacing; + if (first) + spec = top_system_spacing; + else if (last_system_was_title) + spec = after_title_spacing; + else if (0 == Paper_column::get_rank (sys->get_bound (LEFT))) + spec = between_scores_system_spacing; + Spring spring (first ? 0 : 1, 0.0); Real padding = 0.0; alter_spring_from_spacing_spec (spec, &spring); @@ -106,7 +115,7 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst } else if (Prob *p = unsmob_prob (scm_car (s))) { - SCM spec = first ? first_system_spacing + SCM spec = first ? top_system_spacing : (last_system_was_title ? between_title_spacing : before_title_spacing); Spring spring (first ? 0 : 1, 0.0); Real padding = 0.0; @@ -122,16 +131,16 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst Spring last_spring (0, 0); Real last_padding = 0; - alter_spring_from_spacing_spec (last_system_spacing, &last_spring); - read_spacing_spec (last_system_spacing, &last_padding, ly_symbol2scm ("padding")); + alter_spring_from_spacing_spec (bottom_system_spacing, &last_spring); + read_spacing_spec (bottom_system_spacing, &last_padding, ly_symbol2scm ("padding")); last_spring.ensure_min_distance (last_padding - bottom_skyline_.max_height () + footer_height_); springs_.push_back (last_spring); if (elements_.size ()) { - Real bottom_padding; + Real bottom_padding = 0; - // TODO: junk bottom-space now that we have last-system-spacing? + // TODO: junk bottom-space now that we have bottom-system-spacing? // bottom-space has the flexibility that one can do it per-system. // NOTE: bottom-space is misnamed since it is not stretchable space. if (Prob *p = elements_.back ().prob) @@ -493,7 +502,7 @@ Page_layout_problem::build_system_skyline (vector const& staves, Real first_translation = minimum_translations[0]; Real last_spaceable_dy = 0; Real first_spaceable_dy = 0; - bool found_spaceable_staff; + bool found_spaceable_staff = false; for (vsize i = 0; i < staves.size (); ++i) {