X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpage-breaking.cc;h=61a4e82f91d3098baf29e77b800a622749902522;hb=32b9cd030a1917570346e9b9ea267fe409156b2f;hp=01d7469f52ed80ff45a1f9e5c102e1b262076ca3;hpb=3b8f430efd506ccd6ae8235be0f08468c0da937d;p=lilypond.git diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index 01d7469f52..61a4e82f91 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2006--2011 Joe Neeman + Copyright (C) 2006--2012 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -601,7 +601,8 @@ Page_breaking::make_pages (vector lines_per_page, SCM systems) if (label_page_table == SCM_UNDEFINED) label_page_table = SCM_EOL; - // Build a list of (systems . configuration) pairs. Note that we lay out + // Build a list of (systems configuration . footnote-count) triples. + // Note that we lay out // the staves and find the configurations before drawing anything. Some // grobs (like tuplet brackets) look at their neighbours while drawing // themselves. If this happens before the neighbouring staves have @@ -609,6 +610,7 @@ Page_breaking::make_pages (vector lines_per_page, SCM systems) // Align_interface::align_to_ideal_distances might be called). SCM systems_configs_fncounts = SCM_EOL; vsize footnote_count = 0; + Real last_page_force = 0; for (vsize i = 0; i < lines_per_page.size (); i++) { @@ -620,7 +622,19 @@ Page_breaking::make_pages (vector lines_per_page, SCM systems) int fn_lines = Page_layout_problem::get_footnote_count (lines); Page_layout_problem::add_footnotes_to_lines (lines, reset_footnotes_on_new_page ? 0 : footnote_count, book_); - SCM config = get_page_configuration (lines, page_num, rag, bookpart_last_page); + SCM config = SCM_EOL; + SCM dummy_page = make_page (page_num, bookpart_last_page); + Page_layout_problem layout (book_, dummy_page, lines); + if (!scm_is_pair (systems)) + config = SCM_EOL; + else if (rag && !ragged ()) + // If we're ragged-last but not ragged, make the last page + // have the same force as the previous page. + config = layout.fixed_force_solution (last_page_force); + else + config = layout.solution (rag); + + last_page_force = layout.force (); systems_configs_fncounts = scm_cons (scm_cons (lines, config), systems_configs_fncounts); footnote_count += fn_lines;