Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP6
qt6-base.33152
0001-Fix-infinite-layout-loop-with-negative-lin...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Fix-infinite-layout-loop-with-negative-line-width.patch of Package qt6-base.33152
From 78416e0ca4cf9d74c1a778fe448bc946a7ded8c2 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> Date: Thu, 05 Jan 2023 09:20:42 +0100 Subject: [PATCH] Fix infinite layout loop with negative line width Setting a negative line width does not make much sense, but in earlier Qt versions, this work the same as if the line width was 0 (just give you the minimal layout given wrapping constraints). But since 991c056438b311566bc4ea543af0f33dfd5dffbb, we check if current width > line width at an earlier point, and because 0 > -1, we would exit immediately before adding any characters to the text line. To restore the behavior in earlier versions, we set the minimum possible line width to 0. Fixes: QTBUG-109474 Change-Id: Iceadd5135681f61b30de8221853834983941c5a4 Reviewed-by: Lars Knoll <lars@knoll.priv.no> Reviewed-by: hjk <hjk@qt.io> (cherry picked from commit 49a63d375972079ae3000c8b7d512d58d4de32bb) --- diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index aeee165..c6fd99e 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1612,10 +1612,7 @@ return; } - if (width > QFIXED_MAX) - width = QFIXED_MAX; - - line.width = QFixed::fromReal(width); + line.width = QFixed::fromReal(qBound(0.0, width, qreal(QFIXED_MAX))); if (line.length && line.textWidth <= line.width && line.from + line.length == eng->layoutData->string.size()) diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp index 9e6daf8..cf835fe 100644 --- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp @@ -126,6 +126,7 @@ void softHyphens(); void min_maximumWidth_data(); void min_maximumWidth(); + void negativeLineWidth(); private: QFont testFont; @@ -2715,5 +2716,16 @@ } } +void tst_QTextLayout::negativeLineWidth() +{ + QTextLayout layout; + layout.setText("Foo bar"); + layout.beginLayout(); + QTextLine line = layout.createLine(); + line.setLineWidth(-1); + QVERIFY(line.textLength() > 0); + layout.endLayout(); +} + QTEST_MAIN(tst_QTextLayout) #include "tst_qtextlayout.moc"
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