Text format AutoText should use StyledText instead of RichText.
authorYann Bodson <yann.bodson@nokia.com>
Fri, 30 Sep 2011 03:55:07 +0000 (13:55 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 30 Sep 2011 08:37:05 +0000 (10:37 +0200)
Task-number: QTBUG-21723
Change-Id: Ife213be95985ad1022e2f60241e69ecd9f467caf
Reviewed-on: http://codereview.qt-project.org/5825
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Yann Bodson <yann.bodson@nokia.com>
doc/src/declarative/whatsnew.qdoc
src/declarative/items/qsgtext.cpp
src/declarative/items/qsgtext_p_p.h
tests/auto/declarative/qsgtext/data/embeddedImagesLocal.qml
tests/auto/declarative/qsgtext/data/embeddedImagesLocalError.qml
tests/auto/declarative/qsgtext/data/embeddedImagesRemote.qml
tests/auto/declarative/qsgtext/data/embeddedImagesRemoteError.qml
tests/auto/declarative/qsgtext/tst_qsgtext.cpp

index 044ce02..190060c 100644 (file)
@@ -99,6 +99,8 @@ Added topMargin, bottomMargin, leftMargin, rightMargin, xOrigin, yOrigin propert
 Image has two new properties: horizontalAlignment and verticalAlignment. It also has a new value for
 fillMode (Image.Pad) that does not transform the image.
 
+Text will now automatically switch to StyledText instead of RichText if textFormat is set to AutoText.
+
 Grid now has rowSpacing and columnSpacing properties.
 
 Positioners now have attached properties that can be used to determine a subitem's location within a
index a1b1260..5b72eab 100644 (file)
@@ -104,7 +104,7 @@ QSGTextPrivate::QSGTextPrivate()
   maximumLineCountValid(false),
   texture(0),
   imageCacheDirty(false), updateOnComponentComplete(true),
-  richText(false), singleline(false), cacheAllTextAsImage(true), internalWidthUpdate(false),
+  richText(false), styledText(false), singleline(false), cacheAllTextAsImage(true), internalWidthUpdate(false),
   requireImplicitWidth(false), truncated(false), hAlignImplicit(true), rightToLeftText(false),
   layoutTextElided(false), richTextAsImage(false), textureImageCacheDirty(false), naturalWidth(0),
   doc(0), nodeType(NodeIsNull)
@@ -230,7 +230,7 @@ void QSGTextPrivate::updateLayout()
     if (!richText) {
         layout.clearLayout();
         layout.setFont(font);
-        if (format != QSGText::StyledText) {
+        if (!styledText) {
             QString tmp = text;
             tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
             singleline = !tmp.contains(QChar::LineSeparator);
@@ -937,7 +937,7 @@ void QSGText::setFont(const QFont &font)
     The text to display. Text supports both plain and rich text strings.
 
     The item will try to automatically determine whether the text should
-    be treated as rich text. This determination is made using Qt::mightBeRichText().
+    be treated as styled text. This determination is made using Qt::mightBeRichText().
 */
 QString QSGText::text() const
 {
@@ -951,7 +951,8 @@ void QSGText::setText(const QString &n)
     if (d->text == n)
         return;
 
-    d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
+    d->richText = d->format == RichText;
+    d->styledText = d->format == StyledText || (d->format == AutoText && Qt::mightBeRichText(n));
     d->text = n;
     if (isComponentComplete()) {
         if (d->richText) {
@@ -1316,13 +1317,13 @@ void QSGText::resetMaximumLineCount()
     \list
     \o Text.AutoText (default)
     \o Text.PlainText
-    \o Text.RichText
     \o Text.StyledText
+    \o Text.RichText
     \endlist
 
     If the text format is \c Text.AutoText the text element
     will automatically determine whether the text should be treated as
-    rich text.  This determination is made using Qt::mightBeRichText().
+    styled text.  This determination is made using Qt::mightBeRichText().
 
     Text.StyledText is an optimized format supporting some basic text
     styling markup, in the style of html 3.2:
@@ -1379,7 +1380,8 @@ void QSGText::setTextFormat(TextFormat format)
         return;
     d->format = format;
     bool wasRich = d->richText;
-    d->richText = format == RichText || (format == AutoText && Qt::mightBeRichText(d->text));
+    d->richText = format == RichText;
+    d->styledText = format == StyledText || (format == AutoText && Qt::mightBeRichText(d->text));
 
     if (!wasRich && d->richText && isComponentComplete()) {
         d->ensureDoc();
@@ -1686,7 +1688,7 @@ void QSGText::componentComplete()
 
 QString QSGTextPrivate::anchorAt(const QPointF &mousePos)
 {
-    if (format == QSGText::StyledText) {
+    if (styledText) {
         for (int i = 0; i < layout.lineCount(); ++i) {
             QTextLine line = layout.lineAt(i);
             if (line.naturalTextRect().contains(mousePos)) {
@@ -1717,7 +1719,7 @@ void QSGText::mousePressEvent(QMouseEvent *event)
     Q_D(QSGText);
 
     if (d->isLinkActivatedConnected()) {
-        if (d->format == QSGText::StyledText)
+        if (d->styledText)
             d->activeLink = d->anchorAt(event->localPos());
         else if (d->richText && d->doc)
             d->activeLink = d->doc->documentLayout()->anchorAt(event->localPos());
@@ -1742,7 +1744,7 @@ void QSGText::mouseReleaseEvent(QMouseEvent *event)
 
     QString link;
     if (d->isLinkActivatedConnected()) {
-        if (d->format == QSGText::StyledText)
+        if (d->styledText)
             link = d->anchorAt(event->localPos());
         else if (d->richText && d->doc)
             link = d->doc->documentLayout()->anchorAt(event->localPos());
index 2e99997..ddd54b6 100644 (file)
@@ -110,6 +110,7 @@ public:
     bool imageCacheDirty:1;
     bool updateOnComponentComplete:1;
     bool richText:1;
+    bool styledText:1;
     bool singleline:1;
     bool cacheAllTextAsImage:1;
     bool internalWidthUpdate:1;
index d71e9bb..74b2ab8 100644 (file)
@@ -1,5 +1,6 @@
 import QtQuick 2.0
 
 Text {
+    textFormat: Text.RichText
     text: "<img src='http/exists.png'>"
 }
index e524d02..702633c 100644 (file)
@@ -1,5 +1,6 @@
 import QtQuick 2.0
 
 Text {
+    textFormat: Text.RichText
     text: "<img src='http://127.0.0.1:14453/exists.png'>"
 }
index f541e0e..5762f3e 100644 (file)
@@ -1,5 +1,6 @@
 import QtQuick 2.0
 
 Text {
+    textFormat: Text.RichText
     text: "<img src='http://127.0.0.1:14453/notexists.png'>"
 }
index 7b04e76..5a27a69 100644 (file)
@@ -321,14 +321,14 @@ void tst_qsgtext::width()
 
         int documentWidth = document.idealWidth();
 
-        QString componentStr = "import QtQuick 2.0\nText { text: \"" + richText.at(i) + "\" }";
+        QString componentStr = "import QtQuick 2.0\nText { text: \"" + richText.at(i) + "\"; textFormat: Text.RichText }";
         QDeclarativeComponent textComponent(&engine);
         textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
         QSGText *textObject = qobject_cast<QSGText*>(textComponent.create());
 
         QVERIFY(textObject != 0);
         QCOMPARE(textObject->width(), qreal(documentWidth));
-        QVERIFY(textObject->textFormat() == QSGText::AutoText); // setting text doesn't change format
+        QVERIFY(textObject->textFormat() == QSGText::RichText);
 
         delete textObject;
     }
@@ -465,6 +465,24 @@ void tst_qsgtext::textFormat()
         QVERIFY(textObject != 0);
         QVERIFY(textObject->textFormat() == QSGText::RichText);
 
+        QSGTextPrivate *textPrivate = QSGTextPrivate::get(textObject);
+        QVERIFY(textPrivate != 0);
+        QVERIFY(textPrivate->richText == true);
+
+        delete textObject;
+    }
+    {
+        QDeclarativeComponent textComponent(&engine);
+        textComponent.setData("import QtQuick 2.0\nText { text: \"<b>Hello</b>\" }", QUrl::fromLocalFile(""));
+        QSGText *textObject = qobject_cast<QSGText*>(textComponent.create());
+
+        QVERIFY(textObject != 0);
+        QVERIFY(textObject->textFormat() == QSGText::AutoText);
+
+        QSGTextPrivate *textPrivate = QSGTextPrivate::get(textObject);
+        QVERIFY(textPrivate != 0);
+        QVERIFY(textPrivate->styledText == true);
+
         delete textObject;
     }
     {