measures.
#include "international.hh"
#include "system.hh"
#include "warn.hh"
+#include "paper-column.hh"
/*
TODO: for vertical spacing, should also include a rod & spring
-
/*
- line-of-score.hh -- part of GNU LilyPond
+ system.hh -- part of GNU LilyPond
(c) 1996--2006 Han-Wen Nienhuys
*/
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 *);
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;
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;
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*