}
x += thiswidth;
- //lyxerr << "i: " << i << " x: "
- //<< x << " width: " << width << endl;
chunkwidth += thiswidth;
}
if (x >= width) {
// if no break before, break here
if (point == end || chunkwidth >= width - left) {
- if (i > pos) {
+ if (i > pos)
point = i;
- break;
- }
+ else
+ point = i + 1;
+
}
// exit on last registered breakpoint:
break;
}
-// returns the minimum space a row needs on the screen in pixel
-void LyXText::fill(ParagraphList::iterator pit, Row & row, int workwidth) const
+void LyXText::setRowWidth(ParagraphList::iterator pit, Row & row) const
{
// get the pure distance
pos_type const end = row.endpos();
w = max(w, labelEnd(pit));
}
- int const fill = workwidth - w - rightMargin(*pit);
- row.fill(fill);
- row.width(workwidth - fill);
+ row.width(w + rightMargin(*pit));
}
void LyXText::prepareToPrint(ParagraphList::iterator pit, Row & row) const
{
- double w = row.fill();
+ double w = textWidth() - row.width();
double fill_hfill = 0;
double fill_label_hfill = 0;
double fill_separator = 0;
}
switch (align) {
- case LYX_ALIGN_BLOCK: {
- int const ns = numberOfSeparators(*pit, row);
- bool disp_inset = false;
- if (row.endpos() < pit->size()) {
- InsetBase * in = pit->getInset(row.endpos());
- if (in)
- disp_inset = in->display();
- }
- // If we have separators, this is not the last row of a
- // par, does not end in newline, and is not row above a
- // display inset... then stretch it
- if (ns
- && row.endpos() < pit->size()
- && !pit->isNewline(row.endpos() - 1)
- && !disp_inset
- ) {
- fill_separator = w / ns;
- } else if (is_rtl) {
- x += w;
- }
- break;
+ case LYX_ALIGN_BLOCK: {
+ int const ns = numberOfSeparators(*pit, row);
+ bool disp_inset = false;
+ if (row.endpos() < pit->size()) {
+ InsetBase * in = pit->getInset(row.endpos());
+ if (in)
+ disp_inset = in->display();
}
- case LYX_ALIGN_RIGHT:
+ // If we have separators, this is not the last row of a
+ // par, does not end in newline, and is not row above a
+ // display inset... then stretch it
+ if (ns
+ && row.endpos() < pit->size()
+ && !pit->isNewline(row.endpos() - 1)
+ && !disp_inset
+ ) {
+ fill_separator = w / ns;
+ } else if (is_rtl) {
+ x += w;
+ }
+ break;
+ }
+ case LYX_ALIGN_RIGHT:
x += w;
break;
- case LYX_ALIGN_CENTER:
+ case LYX_ALIGN_CENTER:
x += w / 2;
break;
}
do {
Row row(z);
rowBreakPoint(pit, row);
- z = row.endpos();
- fill(pit, row, textwidth_);
+ setRowWidth(pit, row);
prepareToPrint(pit, row);
setHeightOfRow(pit, row);
row.y_offset(pit->height);
pit->rows.push_back(row);
pit->width = std::max(pit->width, row.width());
pit->height += row.height();
+ z = row.endpos();
} while (z < pit->size());
height += pit->height;