From: Jean-Marc Lasgouttes Date: Wed, 3 Jan 2018 17:28:55 +0000 (+0100) Subject: Remove 'premature optimization' that proved buggy X-Git-Tag: 2.3.0rc2~66 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=894ae19224d0537c0c9ebd9ad45e547279769bd8;p=features.git Remove 'premature optimization' that proved buggy At some time it seemed like a good idea in breakRow() to return early when the row was bound to be empty. It turns out that this creates two symptoms: * empty paragraphs will not have an end of paragraph marker * since row width is not correctly computed in this case, caret ghosts can appear in master. This commit removes the oprimization and replace the do {} while() construct to a straightforward while() {}. Related to bug #10952. (cherry picked from commit 76f0a3dd4ee5c7958c6dea79628ef8c2ac2c59bd) --- diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index 6c5a322277..620514421b 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -834,11 +834,6 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const // the width available for the row. int const width = max_width_ - row.right_margin; - if (pos >= end || row.width() > width) { - row.endpos(end); - return need_new_row; - } - #if 0 //FIXME: As long as leftMargin() is not correctly implemented for // MARGIN_RIGHT_ADDRESS_BOX, we should also not do this here. @@ -857,10 +852,7 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const // or the end of the par, then build a representation of the row. pos_type i = pos; FontIterator fi = FontIterator(*this, par, row.pit(), pos); - do { - // this can happen for an empty row after a newline - if (i >= end) - break; + while (i < end && row.width() <= width) { char_type c = par.getChar(i); // The most special cases are handled first. if (par.isInset(i)) { @@ -942,7 +934,7 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const ++i; ++fi; - } while (i < end && row.width() <= width); + } row.finalizeLast(); row.endpos(i);