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 991c056438, 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.
Pick-to: 6.5
Fixes: QTBUG-109474
Change-Id: Iceadd5135681f61b30de8221853834983941c5a4
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Reviewed-by: hjk <hjk@qt.io>
bb10
parent
07a978c756
commit
49a63d3759
|
|
@ -1611,10 +1611,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())
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue