Fix assert on justification of QTextLine with only spaces
In the justification code, we unconditionally subtracted one from the line_length, but then compared the result to 0 afterwards, so we did not support when the line_length is 0 initially, which can happen if it only consists of spaces (in which case trailingSpaces will be non-zero and line_length will be zero.) The fix is to bail out for both strings of length 1 and length 0. [ChangeLog][Text] Fixed an assert when justifying a QTextLine which only contains spaces. Task-number: QTBUG-38520 Change-Id: Ib04993f47eb2f9f7fc49c4a5400f18f9682a72f2 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
This commit is contained in:
parent
12eb3b51c4
commit
7eae50a52d
@ -2057,7 +2057,7 @@ void QTextEngine::justify(const QScriptLine &line)
|
||||
// subtract one char more, as we can't justfy after the last character
|
||||
--line_length;
|
||||
|
||||
if (!line_length)
|
||||
if (line_length <= 0)
|
||||
return;
|
||||
|
||||
int firstItem = findItem(line.from);
|
||||
|
@ -122,6 +122,7 @@ private slots:
|
||||
void boundingRectForUnsetLineWidth();
|
||||
void boundingRectForSetLineWidth();
|
||||
void glyphLessItems();
|
||||
void justifyTrailingSpaces();
|
||||
|
||||
// QTextLine stuff
|
||||
void setNumColumnsWrapAtWordBoundaryOrAnywhere();
|
||||
@ -1996,5 +1997,19 @@ void tst_QTextLayout::cursorInNonStopChars()
|
||||
QVERIFY(line.cursorToX(2) == line.cursorToX(3));
|
||||
}
|
||||
|
||||
void tst_QTextLayout::justifyTrailingSpaces()
|
||||
{
|
||||
QTextLayout layout(QStringLiteral(" t"), testFont);
|
||||
layout.setTextOption(QTextOption(Qt::AlignJustify));
|
||||
layout.beginLayout();
|
||||
|
||||
QTextLine line = layout.createLine();
|
||||
line.setLineWidth(5);
|
||||
|
||||
layout.endLayout();
|
||||
|
||||
QVERIFY(qFuzzyIsNull(layout.lineAt(0).cursorToX(0)));
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QTextLayout)
|
||||
#include "tst_qtextlayout.moc"
|
||||
|
Loading…
Reference in New Issue
Block a user