diff options
author | Vladimir Belyavsky <belyavskyv@gmail.com> | 2022-09-16 21:24:17 +0300 |
---|---|---|
committer | Vladimir Belyavsky <belyavskyv@gmail.com> | 2022-09-20 06:52:21 +0000 |
commit | 013c346a8dcbd618febb07884c64c740daf9754d (patch) | |
tree | ae51601e1f280a19fd955180cca8c4b2a168fb82 /tests/auto/gui/text | |
parent | 53086094d8d2721a05c6e205e6217b17b92cc618 (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.cpp | 28 |
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" |