Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP4
qt6-base.30298
0001-QTextLayout-fix-maximumWidth-for-a-text-co...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-QTextLayout-fix-maximumWidth-for-a-text-containing-spaces.patch of Package qt6-base.30298
From 4945fd93f13d2fc34adf260fd0e0325d0794f3f7 Mon Sep 17 00:00:00 2001 From: Vladimir Belyavsky <belyavskyv@gmail.com> Date: Mon, 26 Sep 2022 19:32:50 +0300 Subject: [PATCH] QTextLayout: fix maximumWidth() for a text containing spaces When laying out a text and calculating maxWidth, we must _always_ take into account the accumulated width of spaces (lbh.spaceData.textWidth) regardless of wrapMode, other text content, spaces position, etc. Fixes: QTBUG-106947 Change-Id: I2ac9af92ed7dd07c1e040bfcf83949a358d1c9c9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> --- src/gui/text/qtextlayout.cpp | 6 +----- tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 32fac09f3375..286722fc4c42 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1976,7 +1976,6 @@ void QTextLine::layout_helper(int maxGlyphs) } if (!lbh.manualWrap && lbh.spaceData.textWidth > line.width) { - lbh.spaceData.textWidth = line.width; // ignore spaces that fall out of the line. goto found; } } else { @@ -2162,12 +2161,9 @@ found: eng->maxWidth = qMax(eng->maxWidth, line.textWidth); } else { eng->minWidth = qMax(eng->minWidth, lbh.minw); - eng->maxWidth += line.textWidth; + eng->maxWidth += line.textWidth + lbh.spaceData.textWidth; } - if (line.textWidth > 0 && item < eng->layoutData->items.size()) - eng->maxWidth += lbh.spaceData.textWidth; - line.textWidth += trailingSpace; if (lbh.spaceData.length) { line.trailingSpaces = lbh.spaceData.length; diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp index 4ae1b33d7943..c85d498318d0 100644 --- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp @@ -124,6 +124,7 @@ private slots: void tooManyDirectionalCharctersCrash_qtbug77819(); void softHyphens_data(); void softHyphens(); + void min_maximumWidth_data(); void min_maximumWidth(); private: @@ -2647,10 +2648,21 @@ void tst_QTextLayout::softHyphens() } } +void tst_QTextLayout::min_maximumWidth_data() +{ + QTest::addColumn<QString>("text"); + + QTest::newRow("long string") << QStringLiteral("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more"); + QTest::newRow("QTBUG-106947") << QStringLiteral("text text"); + QTest::newRow("spaces") << QStringLiteral(" text text "); +} + void tst_QTextLayout::min_maximumWidth() { - QString longString("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more"); - QTextLayout layout(longString, testFont); + QFETCH(QString, text); + + QTextLayout layout(text, testFont); + layout.setCacheEnabled(true); for (int wrapMode = QTextOption::NoWrap; wrapMode <= QTextOption::WrapAtWordBoundaryOrAnywhere; ++wrapMode) { QTextOption opt; -- 2.16.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor