Fixup da2696cc: do not clear useful information from row

Ensure before calling breakRow that the row is empty.

Remove Row::clear(), which has unnatural semantics.

Fixes bug #11396.
This commit is contained in:
Jean-Marc Lasgouttes 2019-05-23 10:26:08 +02:00
parent 596b3c4522
commit 7cc4ceb89c
2 changed files with 3 additions and 4 deletions

View File

@ -261,8 +261,6 @@ public:
Element const & back() const { return elements_.back(); }
/// remove last element
void pop_back();
/// remove all row elements
void clear() { *this = Row(); }
/**
* if row width is too large, remove all elements after last
* separator and update endpos if necessary. If all that

View File

@ -524,10 +524,11 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool const align_rows)
do {
if (row_index == pm.rows().size())
pm.rows().push_back(Row());
else
pm.rows()[row_index] = Row();
Row & row = pm.rows()[row_index];
row.pit(pit);
row.pos(first);
row.pit(pit);
need_new_row = breakRow(row, right_margin);
setRowHeight(row);
row.changed(true);
@ -881,6 +882,7 @@ private:
*/
bool TextMetrics::breakRow(Row & row, int const right_margin) const
{
LATTEST(row.empty());
Paragraph const & par = text_->getPar(row.pit());
pos_type const end = par.size();
pos_type const pos = row.pos();
@ -888,7 +890,6 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const
bool const is_rtl = text_->isRTL(row.pit());
bool need_new_row = false;
row.clear();
row.left_margin = leftMargin(row.pit(), pos);
row.right_margin = right_margin;
if (is_rtl)