Fix capitalization with newline bug
authorYann Bodson <yann.bodson@nokia.com>
Mon, 25 Jun 2012 03:22:12 +0000 (13:22 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 2 Jul 2012 23:08:37 +0000 (01:08 +0200)
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 <eskil.abrahamsen-blomfeldt@nokia.com>
src/gui/text/qtextengine.cpp
tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp

index 6c290e2..41d12a6 100644 (file)
@@ -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);
     }
index 60485b3..21098f4 100644 (file)
@@ -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);