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)
This commit is contained in:
parent
c613c5ce22
commit
78416e0ca4
@ -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())
|
||||
|
@ -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…
x
Reference in New Issue
Block a user