From 2ff6086e0655449ee0c7ca0e4e91ee5bda7ca7bf Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Mon, 25 Jun 2012 13:22:12 +1000 Subject: [PATCH] Fix capitalization with newline bug We only want to change the capitalization if the QScriptAnalysis flag was Lowercase, Uppercase or SmallCaps. Task-number: QTBUG-17485 Change-Id: Icbecb09b06a9153866ae81d592b3f6779c2dafb5 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qtextengine.cpp | 2 +- .../gui/text/qtextlayout/tst_qtextlayout.cpp | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 6c290e209a..41d12a65d6 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -110,7 +110,7 @@ private: QScriptItemArray::Iterator iter = m_items.end(); do { iter--; - if (iter->analysis.flags < QScriptAnalysis::TabOrObject) + if (iter->analysis.flags < QScriptAnalysis::LineOrParagraphSeparator) iter->analysis.flags = flags; } while (iter->position > start); } diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp index 60485b30a5..21098f4036 100644 --- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp @@ -112,6 +112,7 @@ private slots: void tabsForRtl(); void tabHeight(); void capitalization_allUpperCase(); + void capitalization_allUpperCase_newline(); void capitalization_allLowerCase(); void capitalization_smallCaps(); void capitalization_capitalize(); @@ -1670,6 +1671,28 @@ void tst_QTextLayout::capitalization_allUpperCase() QVERIFY(engine->layoutData->items.at(0).analysis.flags == QScriptAnalysis::Uppercase); } +void tst_QTextLayout::capitalization_allUpperCase_newline() +{ + QFont font(testFont); + font.setCapitalization(QFont::AllUppercase); + + QString tmp = "hello\nworld!"; + tmp.replace(QLatin1Char('\n'), QChar::LineSeparator); + + QTextLayout layout(tmp, font); + layout.setCacheEnabled(true); + layout.beginLayout(); + layout.createLine(); + layout.endLayout(); + + QTextEngine *engine = layout.engine(); + engine->itemize(); + QCOMPARE(engine->layoutData->items.count(), 3); + QVERIFY(engine->layoutData->items.at(0).analysis.flags == QScriptAnalysis::Uppercase); + QVERIFY(engine->layoutData->items.at(1).analysis.flags == QScriptAnalysis::LineOrParagraphSeparator); + QVERIFY(engine->layoutData->items.at(2).analysis.flags == QScriptAnalysis::Uppercase); +} + void tst_QTextLayout::capitalization_allLowerCase() { QFont font(testFont);