diff options
-rw-r--r-- | src/gui/text/qtextengine.cpp | 4 | ||||
-rw-r--r-- | tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp | 25 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 82cff6a043..37d6276f6b 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1852,7 +1852,7 @@ void QTextEngine::justify(const QScriptLine &line) itemize(); if (!forceJustification) { - int end = line.from + (int)line.length; + int end = line.from + (int)line.length + line.trailingSpaces; if (end == layoutData->string.length()) return; // no justification at end of paragraph if (end && layoutData->items[findItem(end-1)].analysis.flags == QScriptAnalysis::LineOrParagraphSeparator) @@ -1907,6 +1907,8 @@ void QTextEngine::justify(const QScriptLine &line) int gs = log_clusters[start]; int ge = (end == length(firstItem+i) ? si.num_glyphs : log_clusters[end]); + Q_ASSERT(ge <= si.num_glyphs); + const QGlyphLayout g = shapedGlyphs(&si); for (int i = gs; i < ge; ++i) { diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp index cf3265d446..966102033c 100644 --- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp @@ -184,6 +184,8 @@ private slots: void htmlExportImportBlockCount(); + void QTBUG27354_spaceAndSoftSpace(); + private: void backgroundImage_checkExpectedHtml(const QTextDocument &doc); @@ -2900,5 +2902,28 @@ void tst_QTextDocument::htmlExportImportBlockCount() QCOMPARE(document.blockCount(), 5); } +void tst_QTextDocument::QTBUG27354_spaceAndSoftSpace() +{ + QTextDocument document; + { + QTextCursor cursor(&document); + QTextBlockFormat blockFormat; + blockFormat.setAlignment(Qt::AlignJustify); + cursor.mergeBlockFormat(blockFormat); + cursor.insertText("ac"); + cursor.insertBlock(); + cursor.insertText(" "); + cursor.insertText(QChar(0x2028)); + } + + // Trigger justification of text + QImage image(1000, 1000, QImage::Format_ARGB32); + image.fill(0); + { + QPainter p(&image); + document.drawContents(&p, image.rect()); + } +} + QTEST_MAIN(tst_QTextDocument) #include "tst_qtextdocument.moc" |