/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2011 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
}
/* if we get to here, just put everything on one line */
- warning (_ ("cannot find line breaking that satisfies constraints"));
- ret.push_back (space_line (0, end_brk));
+ if (sys_count > 0) {
+ warning (_ ("cannot find line breaking that satisfies constraints"));
+ ret.push_back (space_line (0, end_brk));
+ }
return ret;
}
}
/* if we get to here, just put everything on one line */
- Line_details details;
- fill_line_details (&details, 0, end_brk);
- ret.push_back (details);
+ if (sys_count > 0) {
+ Line_details details;
+ fill_line_details (&details, 0, end_brk);
+ ret.push_back (details);
+ }
return ret;
}
breaks_ = pscore_->get_break_indices ();
all_ = pscore_->root_system ()->used_columns ();
lines_.resize (breaks_.size (), breaks_.size (), Line_details ());
- vector<Simple_spacer> spacers
- = pscore_->root_system ()->get_simple_spacers (other_lines.length (),
- other_lines.length () - first_line.length (),
- ragged_right_);
+ vector<Real> forces = get_line_forces (all_,
+ other_lines.length (),
+ other_lines.length () - first_line.length (),
+ ragged_right_);
for (vsize i = 0; i + 1 < breaks_.size (); i++)
{
for (vsize j = i + 1; j < breaks_.size (); j++)
bool ragged = ragged_right_ || (last && ragged_last_);
Line_details &line = lines_.at (j, i);
- line.force_ = spacers[i * breaks_.size () + j].force_penalty (ragged_right_);
- if (!spacers[i * breaks_.size () + j].fits ())
- {
- if (spacers[i * breaks_.size () + j].minimal_)
- line.force_ = -200000;
- else
- line.force_ = infinity_f;
- }
+ line.force_ = forces[i * breaks_.size () + j];
if (ragged && last && !isinf (line.force_))
line.force_ = (line.force_ < 0 && j > i + 1) ? infinity_f : 0;
- if (!line.force_ && !spacers[i * breaks_.size () + j].line_len ())
- line.force_ = infinity_f;
if (isinf (line.force_))
break;
last_column_ = 0;
force_ = 0;
- Interval stencil_extent = unsmob_stencil (pb->get_property ("stencil"))->extent (Y_AXIS);
+ Stencil *st = unsmob_stencil (pb->get_property ("stencil"));
+ Interval stencil_extent = st->is_empty (Y_AXIS) ? Interval (0, 0)
+ : st->extent (Y_AXIS);
shape_ = Line_shape (stencil_extent, stencil_extent); // pretend it goes all the way across
tallness_ = 0;
bottom_padding_ = 0;