From 2a9d5803b8feca93ea57f69f9cc68cf83c49d6a9 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 8 Jan 2007 13:36:48 +0100 Subject: [PATCH] better check for whole-measure spacing: also pickup incomplete end measures. --- lily/align-interface.cc | 1 + lily/include/system.hh | 5 ++--- lily/spacing-spanner.cc | 12 ++++++++++-- lily/system.cc | 4 ++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lily/align-interface.cc b/lily/align-interface.cc index 23b9527d29..7b3e803723 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -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 diff --git a/lily/include/system.hh b/lily/include/system.hh index 597b3204fc..50d1a769ed 100644 --- a/lily/include/system.hh +++ b/lily/include/system.hh @@ -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 broken_col_range (Item const *, Item const *) const; vector used_columns () const; - Grob *column (vsize i) const; + Paper_column *column (vsize i) const; void add_column (Paper_column *); void typeset_grob (Grob *); diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 515e6e081a..c8bf534645 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -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; diff --git a/lily/system.cc b/lily/system.cc index 12ceddd1f5..d70af08f96 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -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 (columns[which]); } Paper_score* -- 2.39.5