summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/text
diff options
context:
space:
mode:
authorVladimir Belyavsky <belyavskyv@gmail.com>2022-09-16 21:24:17 +0300
committerVladimir Belyavsky <belyavskyv@gmail.com>2022-09-20 06:52:21 +0000
commit013c346a8dcbd618febb07884c64c740daf9754d (patch)
treeae51601e1f280a19fd955180cca8c4b2a168fb82 /tests/auto/gui/text
parent53086094d8d2721a05c6e205e6217b17b92cc618 (diff)
QTextLayout: fix maximumWidth() for a text containing line separator
When laying out, we need to increase layout's maximum width _only_ if the previous line was not explicitly wrapped by a line or paragraph separator, or if the current line's width is greater than the previously accumulated layout's maximum width. Fixes: QTBUG-89557 Fixes: QTBUG-104986 Pick-to: 6.2 6.4 Change-Id: Ib7cc4b9dda8f20166dcbd5cfd3b56424bb33d14a Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'tests/auto/gui/text')
-rw-r--r--tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index def7c88593..25906ebf32 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -125,6 +125,7 @@ private slots:
void softHyphens_data();
void softHyphens();
void min_maximumWidth();
+ void min_maximumWidthWithLineSeparator();
private:
QFont testFont;
@@ -2683,5 +2684,32 @@ void tst_QTextLayout::min_maximumWidth()
}
}
+void tst_QTextLayout::min_maximumWidthWithLineSeparator()
+{
+ QTextLayout referenceLayout("text", testFont);
+
+ QString multilineText("text\ntext\ntext");
+ multilineText.replace('\n', QChar::LineSeparator);
+ QTextLayout layout(multilineText, testFont);
+
+ for (int wrapMode = QTextOption::NoWrap; wrapMode <= QTextOption::WrapAtWordBoundaryOrAnywhere; ++wrapMode) {
+ QTextOption opt;
+ opt.setWrapMode((QTextOption::WrapMode)wrapMode);
+
+ referenceLayout.setTextOption(opt);
+ referenceLayout.beginLayout();
+ while (referenceLayout.createLine().isValid()) { }
+ referenceLayout.endLayout();
+
+ layout.setTextOption(opt);
+ layout.beginLayout();
+ while (layout.createLine().isValid()) { }
+ layout.endLayout();
+
+ QCOMPARE(layout.minimumWidth(), referenceLayout.minimumWidth());
+ QCOMPARE(layout.maximumWidth(), referenceLayout.maximumWidth());
+ }
+}
+
QTEST_MAIN(tst_QTextLayout)
#include "tst_qtextlayout.moc"