}
+// FIXME: remove this and move the changebar update to Row::push_back()
void Row::finalizeLast()
{
if (elements_.empty())
void Row::push_back(Row::Element const & e)
{
- dim_.wid += e.dim.wid + ((e.type == INSET) ? e.extra : 0);
+ dim_.wid += e.dim.wid;
elements_.push_back(e);
}
void Row::pop_back()
{
- Element const & e = elements_.back();
- dim_.wid -= e.dim.wid + ((e.type == INSET) ? e.extra : 0);
+ dim_.wid -= elements_.back().dim.wid;
elements_.pop_back();
}
--cit_brk;
// make a copy of the element to work on it.
Element brk = *cit_brk;
- /* If the current element is an inset that allows breaking row
- * after itself, and if the row is already short enough after
- * this element, then cut right after it.
+ /* If the current element allows breaking row after itself,
+ * and if the row is already short enough after this element,
+ * then cut right after it.
*/
if (wid_brk <= max_width && brk.row_flags & CanBreakAfter) {
end_ = brk.endpos;
}
// assume now that the current element is not there
wid_brk -= brk.dim.wid;
- /* If the current element is an inset that allows breaking row
- * before itself, and if the row is already short enough before
- * this element, then cut right before it.
+ /* If the current element allows breaking row before itself,
+ * and if the row is already short enough before this element,
+ * then cut right before it.
*/
if (wid_brk <= max_width && brk.row_flags & CanBreakBefore && cit_brk != beg) {
end_ = (cit_brk -1)->endpos;
*/
int const split_width = min(max_width - wid_brk, brk.dim.wid - 2);
if (brk.splitAt(split_width, next_width, BEST_EFFORT, tail)) {
- // if we did not manage to fit a part of the element into
- // the split_width limit, at least remember that we can
- // shorten the row if needed.
- if (brk.dim.wid > split_width) {
- min_row_wid = wid_brk + brk.dim.wid;
- tail.clear();
- continue;
- }
/* if this element originally did not cause a row overflow
* in itself, and the remainder of the row would still be
* too large after breaking, then we will have issues in
- * next row. Thus breaking does not help.
+ * next row. Thus breaking here does not help.
*/
if (wid_brk + cit_brk->dim.wid < max_width
&& min_row_wid - (wid_brk + brk.dim.wid) >= next_width) {
tail.clear();
break;
}
+ /* if we did not manage to fit a part of the element into
+ * the split_width limit, at least remember that we can
+ * shorten the row if needed.
+ */
+ if (brk.dim.wid > split_width) {
+ min_row_wid = wid_brk + brk.dim.wid;
+ tail.clear();
+ continue;
+ }
+ // We have found a proper place where to break this string element.
end_ = brk.endpos;
*cit_brk = brk;
dim_.wid = wid_brk + brk.dim.wid;