QTextLayout: fix maximumWidth() for a text containing spaces
When laying out a text and calculating maxWidth, we must _always_ take into account the accumulated width of spaces (lbh.spaceData.textWidth) regardless of wrapMode, other text content, spaces position, etc. Fixes: QTBUG-106947 Change-Id: I2ac9af92ed7dd07c1e040bfcf83949a358d1c9c9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>bb10
parent
fd28c97075
commit
4945fd93f1
|
|
@ -1976,7 +1976,6 @@ void QTextLine::layout_helper(int maxGlyphs)
|
|||
}
|
||||
|
||||
if (!lbh.manualWrap && lbh.spaceData.textWidth > line.width) {
|
||||
lbh.spaceData.textWidth = line.width; // ignore spaces that fall out of the line.
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -2162,12 +2161,9 @@ found:
|
|||
eng->maxWidth = qMax(eng->maxWidth, line.textWidth);
|
||||
} else {
|
||||
eng->minWidth = qMax(eng->minWidth, lbh.minw);
|
||||
eng->maxWidth += line.textWidth;
|
||||
eng->maxWidth += line.textWidth + lbh.spaceData.textWidth;
|
||||
}
|
||||
|
||||
if (line.textWidth > 0 && item < eng->layoutData->items.size())
|
||||
eng->maxWidth += lbh.spaceData.textWidth;
|
||||
|
||||
line.textWidth += trailingSpace;
|
||||
if (lbh.spaceData.length) {
|
||||
line.trailingSpaces = lbh.spaceData.length;
|
||||
|
|
|
|||
|
|
@ -124,6 +124,7 @@ private slots:
|
|||
void tooManyDirectionalCharctersCrash_qtbug77819();
|
||||
void softHyphens_data();
|
||||
void softHyphens();
|
||||
void min_maximumWidth_data();
|
||||
void min_maximumWidth();
|
||||
|
||||
private:
|
||||
|
|
@ -2647,10 +2648,21 @@ void tst_QTextLayout::softHyphens()
|
|||
}
|
||||
}
|
||||
|
||||
void tst_QTextLayout::min_maximumWidth_data()
|
||||
{
|
||||
QTest::addColumn<QString>("text");
|
||||
|
||||
QTest::newRow("long string") << QStringLiteral("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more");
|
||||
QTest::newRow("QTBUG-106947") << QStringLiteral("text text");
|
||||
QTest::newRow("spaces") << QStringLiteral(" text text ");
|
||||
}
|
||||
|
||||
void tst_QTextLayout::min_maximumWidth()
|
||||
{
|
||||
QString longString("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more");
|
||||
QTextLayout layout(longString, testFont);
|
||||
QFETCH(QString, text);
|
||||
|
||||
QTextLayout layout(text, testFont);
|
||||
layout.setCacheEnabled(true);
|
||||
|
||||
for (int wrapMode = QTextOption::NoWrap; wrapMode <= QTextOption::WrapAtWordBoundaryOrAnywhere; ++wrapMode) {
|
||||
QTextOption opt;
|
||||
|
|
|
|||
Loading…
Reference in New Issue