]> git.donarmstrong.com Git - lilypond.git/commitdiff
better check for whole-measure spacing: also pickup incomplete end release/2.11.10-1
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 8 Jan 2007 12:36:48 +0000 (13:36 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 8 Jan 2007 12:36:48 +0000 (13:36 +0100)
measures.

lily/align-interface.cc
lily/include/system.hh
lily/spacing-spanner.cc
lily/system.cc

index 23b9527d296147e7934829aed218d1ed658d71c3..7b3e8037230c96e9e92844f4c43d3bb3d61f6d0a 100644 (file)
@@ -16,6 +16,7 @@
 #include "international.hh"
 #include "system.hh"
 #include "warn.hh"
+#include "paper-column.hh"
 
 /*
   TODO: for vertical spacing, should also include a rod & spring
index 597b3204fc7c447b4699d39c563c9ece0270a42c..50d1a769ed08aa873915cb405405bed0361311e3 100644 (file)
@@ -1,6 +1,5 @@
-
 /*
-  line-of-score.hh -- part of GNU LilyPond
+  system.hh -- part of GNU LilyPond
 
   (c) 1996--2006 Han-Wen Nienhuys
 */
@@ -45,7 +44,7 @@ public:
 
   vector<Item*> broken_col_range (Item const *, Item const *) const;
   vector<Grob*> used_columns () const;
-  Grob *column (vsize i) const;
+  Paper_column *column (vsize i) const;
 
   void add_column (Paper_column *);
   void typeset_grob (Grob *);
index 515e6e081af6bcac3f10e352863d07514ac451af..c8bf5346450542b385a4429b68e52ea8c395067d 100644 (file)
@@ -401,11 +401,13 @@ bool
 Spacing_spanner::fills_measure (Grob *me, Item *left, Item *col)
 {
   System *sys = get_root_system (me);
-  Grob *next = sys->column (col->get_column()->get_rank () + 1);
+  Item *next = sys->column (col->get_column()->get_rank () + 1);
   if (!next)
     return false;
 
   if (Paper_column::is_musical (next)
+      || Paper_column::is_musical (left)
+      || !Paper_column::is_musical (col)
       || !Paper_column::is_used (next))
     return false;
   
@@ -416,7 +418,13 @@ Spacing_spanner::fills_measure (Grob *me, Item *left, Item *col)
   if (!len)
     return false;
   
-  if (dt.main_part_ == len->main_part_)
+  /*
+    Don't check for exact measure length, since ending measures are
+    often shortened due to pickups.
+   */
+  if (dt.main_part_ > len->main_part_ / Rational (2)
+      && (next->is_broken ()
+         || next->break_status_dir ()))
     return true;
 
   return false;
index 12ceddd1f53857d0e421c9eefdbbf294f87fa480..d70af08f96415c25f8756e954d9d39c85264326c 100644 (file)
@@ -489,14 +489,14 @@ System::used_columns () const
   return columns;
 }
 
-Grob*
+Paper_column *
 System::column (vsize which) const
 {
   extract_grob_set (this, "columns", columns);
   if (which >= columns.size ())
     return 0;
   
-  return columns[which];
+  return dynamic_cast<Paper_column*> (columns[which]);
 }
 
 Paper_score*