commit 7cc4ceb89c184e51c4dc575b7a5c2928469b3f14
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Thu May 23 10:26:08 2019 +0200
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.
---
src/Row.h | 2 --
src/TextMetrics.cpp | 5 +++--
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/Row.h b/src/Row.h
index e4a8e68..d210174 100644
--- a/src/Row.h
+++ b/src/Row.h
@@ -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
diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 6f195a6..fc610ad 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -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)