static Real get_duration_space (Moment dur, Spacing_options const *, bool *);
static Rational effective_shortest_duration (Grob *me, vector<Grob*> const &all);
static void breakable_column_spacing (Grob *, Item *l, Item *r, Spacing_options const *);
- static void prune_loose_columns (Grob *, Spacing_options *);
+ static void prune_loose_columns (Grob *, vector<Grob*> *cols, Spacing_options *);
static void set_explicit_neighbor_columns (vector<Grob*> const &cols);
static void set_implicit_neighbor_columns (vector<Grob*> const &cols);
- static void generate_springs (Grob *me, Spacing_options const *);
+ static void generate_springs (Grob *me, vector<Grob*> const &cols, Spacing_options const *);
static void musical_column_spacing (Grob *, Item *, Item *, Spacing_options const *);
static bool fills_measure (Grob *, Item *, Item *);
public:
*/
Spacing_options options;
options.init_from_grob (me);
+ vector<Grob*> cols = Spacing_spanner::get_columns (me);
+ set_explicit_neighbor_columns (cols);
- set_explicit_neighbor_columns (options.columns_);
-
- prune_loose_columns (me, &options);
- set_implicit_neighbor_columns (options.columns_);
- generate_springs (me, &options);
+ prune_loose_columns (me, &cols, &options);
+ set_implicit_neighbor_columns (cols);
+ generate_springs (me, cols, &options);
return SCM_UNSPECIFIED;
}
void
Spacing_spanner::generate_springs (Grob *me,
+ vector<Grob*> const &cols,
Spacing_options const *options)
{
Paper_column *prev = 0;
- for (vsize i = 0; i < options->columns_.size (); i++)
+ for (vsize i = 0; i < cols.size (); i++)
{
- Paper_column *col = dynamic_cast<Paper_column *> (options->columns_[i]);
- Paper_column *next = (i < options->columns_.size()-1) ? dynamic_cast<Paper_column *> (options->columns_[i+1]) : 0;
+ Paper_column *col = dynamic_cast<Paper_column *> (cols[i]);
+ Paper_column *next = (i < cols.size()-1) ? dynamic_cast<Paper_column *> (cols[i+1]) : 0;
if (i > 0)
generate_pair_spacing (me, prev, col, next, options);
bool
Spacing_spanner::fills_measure (Grob *me, Item *l, Item *r)
{
- return false;
System *sys = get_root_system (me);
Grob *next = sys->column (r->get_column()->get_rank () + 1);
if (!next)
return false;
+ if (Paper_column::is_musical (next))
+ return false;
+
Moment dt =
Paper_column::when_mom (next) - Paper_column::when_mom (r);
}
- if (fills_measure (me, l, r))
+ if (Paper_column::is_musical (r)
+ && fills_measure (me, l, r))
{
compound_space += 1.0;
}