diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index aeee1652b8e..c6fd99e57cc 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1612,10 +1612,7 @@ void QTextLine::setLineWidth(qreal width) 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 9e6daf81b13..cf835fe245f 100644 --- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp @@ -126,6 +126,7 @@ private slots: void softHyphens(); void min_maximumWidth_data(); void min_maximumWidth(); + void negativeLineWidth(); private: QFont testFont; @@ -2715,5 +2716,16 @@ void tst_QTextLayout::min_maximumWidth() } } +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"