]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/page-spacing.cc (min_page_count): by running the loop
authorJoe Neeman <joeneeman@gmail.com>
Sat, 23 Sep 2006 11:58:25 +0000 (11:58 +0000)
committerJoe Neeman <joeneeman@gmail.com>
Sat, 23 Sep 2006 11:58:25 +0000 (11:58 +0000)
backwards, we can calculate ragged_last properly.

ChangeLog
lily/page-spacing.cc

index f0d3b2a49373d73bfb559b622d310777bf1cf0c9..9ddb95692f9275387dbe7e82b90404c8a9054767 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-23  Joe Neeman  <joeneeman@gmail.com>
+
+       * lily/page-spacing.cc (min_page_count): by running the loop
+       backwards, we can calculate ragged_last properly.
+
 2006-09-22  Mats Bengtsson  <mabe@drongo.s3.kth.se>
 
        * ly/titling-init.ly (scoreTitleMarkup): Rename (typo!?)
index 4d11f0c86595cf5b68b8ba52e59bd2fa9e0dc779..e7816009cd2a6c0450310d3a3337af5bd1fc3d14 100644 (file)
@@ -341,27 +341,30 @@ Page_spacer::calc_subproblem (vsize page, vsize line)
 }
 
 static vsize
-min_page_count (vector<Line_details> const &lines, Real page_height, bool ragged)
+min_page_count (vector<Line_details> const &lines, Real page_height, bool ragged, bool ragged_last)
 {
   vsize ret = 1;
   Real cur_rod_height = 0;
 
-  for (vsize i = 0; i < lines.size (); i++)
+  assert (lines.size ());
+  for (vsize i = lines.size (); i--;)
     {
+      bool rag = ragged || (ragged_last && ret == 1);
       Real ext_len = lines[i].extent_.length ();
       Real next_height = cur_rod_height + ext_len
-       + (ragged ? lines[i].space_ : 0)
-       + ((cur_rod_height > 0) ? lines[i-1].padding_: 0);
+       + (rag ? lines[i].space_ : 0)
+       + ((cur_rod_height > 0) ? lines[i].padding_: 0);
 
       if ((next_height > page_height && cur_rod_height > 0)
          || (i > 0 && lines[i-1].page_permission_ == ly_symbol2scm ("force")))
        {
          ret++;
-         cur_rod_height = ext_len + (ragged ? lines[i].space_ : 0);
+         cur_rod_height = ext_len + (rag ? lines[i].space_ : 0);
        }
       else
        cur_rod_height = next_height;
     }
+
   return ret;
 }
 
@@ -373,7 +376,7 @@ space_systems_on_min_pages (vector<Line_details> const &lines,
                            bool ragged_last)
 {
   vector<Line_details> compressed_lines = compress_lines (lines);
-  vsize min_p_count = min_page_count (compressed_lines, page_height, ragged);
+  vsize min_p_count = min_page_count (compressed_lines, page_height, ragged, ragged_last);
   Spacing_result ret;
 
   if (min_p_count == 1)
@@ -425,7 +428,7 @@ space_systems_on_best_pages (vector<Line_details> const &lines,
                             bool ragged_last)
 {
   vector<Line_details> compressed_lines = compress_lines (lines);
-  vsize min_p_count = min_page_count (compressed_lines, page_height, ragged);
+  vsize min_p_count = min_page_count (compressed_lines, page_height, ragged, ragged_last);
 
   Page_spacer ps (compressed_lines, page_height, ragged, ragged_last);
   Spacing_result best = ps.solve (min_p_count);