From 8872c0716fb33e33311a78e693b61d3dd6b656c1 Mon Sep 17 00:00:00 2001
From: Yann Bodson <yann.bodson@nokia.com>
Date: Mon, 28 Nov 2011 11:26:40 +1000
Subject: [PATCH] Support inline images with <img> tag in StyledText

Task-number: QTBUG-21793
Change-Id: Ie7b9f293c6c9a949c1899152c38b61251b0069d3
Reviewed-by: Yann Bodson <yann.bodson@nokia.com>
---
 .../declarative/text/imgtag/TextWithImage.qml |  55 +++++++
 .../text/imgtag/images/face-sad.png           | Bin 0 -> 6148 bytes
 .../text/imgtag/images/face-smile-big.png     | Bin 0 -> 6058 bytes
 .../text/imgtag/images/face-smile.png         | Bin 0 -> 6446 bytes
 .../text/imgtag/images/heart200.png           | Bin 0 -> 8248 bytes
 .../declarative/text/imgtag/images/qtlogo.png | Bin 0 -> 6450 bytes
 .../text/imgtag/images/starfish_2.png         | Bin 0 -> 18243 bytes
 examples/declarative/text/imgtag/imgtag.qml   | 101 ++++++++++++
 .../declarative/text/styledtext-layout.qml    |  55 ++++---
 src/quick/items/qquicktext.cpp                | 151 ++++++++++++++++--
 src/quick/items/qquicktext_p.h                |   3 +-
 src/quick/items/qquicktext_p_p.h              |   7 +
 src/quick/util/qdeclarativestyledtext.cpp     |  98 +++++++++++-
 src/quick/util/qdeclarativestyledtext_p.h     |  46 +++++-
 .../tst_qdeclarativestyledtext.cpp            |   7 +-
 .../qquicktext/data/images/face-sad.png       | Bin 0 -> 6148 bytes
 .../qquicktext/data/images/heart200.png       | Bin 0 -> 8248 bytes
 .../qquicktext/data/images/starfish_2.png     | Bin 0 -> 18243 bytes
 .../qtquick2/qquicktext/data/imgTagsElide.qml |  24 +++
 .../qquicktext/data/imgTagsUpdates.qml        |  12 ++
 .../qtquick2/qquicktext/tst_qquicktext.cpp    | 120 ++++++++++++++
 21 files changed, 620 insertions(+), 59 deletions(-)
 create mode 100644 examples/declarative/text/imgtag/TextWithImage.qml
 create mode 100644 examples/declarative/text/imgtag/images/face-sad.png
 create mode 100644 examples/declarative/text/imgtag/images/face-smile-big.png
 create mode 100644 examples/declarative/text/imgtag/images/face-smile.png
 create mode 100644 examples/declarative/text/imgtag/images/heart200.png
 create mode 100644 examples/declarative/text/imgtag/images/qtlogo.png
 create mode 100644 examples/declarative/text/imgtag/images/starfish_2.png
 create mode 100644 examples/declarative/text/imgtag/imgtag.qml
 create mode 100644 tests/auto/qtquick2/qquicktext/data/images/face-sad.png
 create mode 100644 tests/auto/qtquick2/qquicktext/data/images/heart200.png
 create mode 100644 tests/auto/qtquick2/qquicktext/data/images/starfish_2.png
 create mode 100644 tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml
 create mode 100644 tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml

diff --git a/examples/declarative/text/imgtag/TextWithImage.qml b/examples/declarative/text/imgtag/TextWithImage.qml
new file mode 100644
index 0000000000..bc09aa2a52
--- /dev/null
+++ b/examples/declarative/text/imgtag/TextWithImage.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Text {
+    width: parent.width
+    font.pointSize: 14
+    wrapMode: Text.WordWrap
+    textFormat: Text.StyledText
+    horizontalAlignment: main.hAlign
+
+    Rectangle {
+        border.color: "#efefef"
+        color: "transparent"
+        anchors.fill: parent
+    }
+}
diff --git a/examples/declarative/text/imgtag/images/face-sad.png b/examples/declarative/text/imgtag/images/face-sad.png
new file mode 100644
index 0000000000000000000000000000000000000000..24188b7985f9e680a434394dd47c131bae0a977d
GIT binary patch
literal 6148
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
JRSJ;s{{b1Oo^t>I

literal 0
HcmV?d00001

diff --git a/examples/declarative/text/imgtag/images/face-smile-big.png b/examples/declarative/text/imgtag/images/face-smile-big.png
new file mode 100644
index 0000000000000000000000000000000000000000..d05e0bf21e7e0b439f731895cd04768a9063a645
GIT binary patch
literal 6058
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
Rd*<KYbTz0pq(KoD^*=nCM=t;X

literal 0
HcmV?d00001

diff --git a/examples/declarative/text/imgtag/images/face-smile.png b/examples/declarative/text/imgtag/images/face-smile.png
new file mode 100644
index 0000000000000000000000000000000000000000..e5e1d1353c06eba8ce4c83a9991dfdf835a5dfd7
GIT binary patch
literal 6446
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

literal 0
HcmV?d00001

diff --git a/examples/declarative/text/imgtag/images/heart200.png b/examples/declarative/text/imgtag/images/heart200.png
new file mode 100644
index 0000000000000000000000000000000000000000..cedd3ea608e3dab1a62dc29aa3e455b62b536309
GIT binary patch
literal 8248
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%0Ac|r82b9UDb{NTuxI~pI>(R32Hi3ng+^K8`s
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
LbzoJ>7NP$K;5bYb

literal 0
HcmV?d00001

diff --git a/examples/declarative/text/imgtag/images/qtlogo.png b/examples/declarative/text/imgtag/images/qtlogo.png
new file mode 100644
index 0000000000000000000000000000000000000000..996719a4c606fc81ceb38a154e622ab5a22c7f0c
GIT binary patch
literal 6450
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

literal 0
HcmV?d00001

diff --git a/examples/declarative/text/imgtag/images/starfish_2.png b/examples/declarative/text/imgtag/images/starfish_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..132c20ffd0234a590411c6ba1936249335664ac8
GIT binary patch
literal 18243
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

literal 0
HcmV?d00001

diff --git a/examples/declarative/text/imgtag/imgtag.qml b/examples/declarative/text/imgtag/imgtag.qml
new file mode 100644
index 0000000000..7f0d1dcfa3
--- /dev/null
+++ b/examples/declarative/text/imgtag/imgtag.qml
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: main
+    width: 640; height: 800
+    focus: true
+
+    property var hAlign: Text.AlignLeft
+
+    Flickable {
+        anchors.fill: parent
+        contentWidth: parent.width
+        contentHeight: col.height + 20
+
+        Column {
+            id: col
+            x: 10; y: 10
+            spacing: 20
+            width: parent.width - 20
+
+            TextWithImage {
+                text: "This is a <b>happy</b> face<img src=\"images/face-smile.png\">"
+            }
+            TextWithImage {
+                text: "This is a <b>very<img src=\"images/face-smile-big.png\" align=\"middle\"/>happy</b> face aligned in the middle."
+            }
+            TextWithImage {
+                elide: Text.ElideRight
+                maximumLineCount: 2
+                text: "This is a sad face aligned to the top. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc rutrum dui pretium ipsum malesuada venenatis. Nulla sed turpis risus. Integer sit amet odio quis mauris varius venenatis<img src=\"images/face-sad.png\" align=\"top\">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc rutrum dui pretium ipsum malesuada venenatis. Nulla sed turpis risus. Integer sit amet odio quis mauris varius venenatis."
+            }
+            TextWithImage {
+                text: "This is a tiny<img src=\"images/face-smile.png\" width=\"15\" height=\"15\">happy face."
+            }
+            TextWithImage {
+                text: "This is a starfish<img src=\"images/starfish_2.png\" width=\"50\" height=\"50\" align=\"top\">aligned to the top and another one<img src=\"images/heart200.png\" width=\"50\" height=\"50\">aligned to the bottom."
+            }
+            TextWithImage {
+                text: "Qt logos<img src=\"images/qtlogo.png\" width=\"55\" height=\"60\" align=\"middle\"><img src=\"images/qtlogo.png\" width=\"37\" height=\"40\" align=\"middle\"><img src=\"images/qtlogo.png\" width=\"18\" height=\"20\" align=\"middle\">aligned in the middle with different sizes."
+            }
+            TextWithImage {
+                text: "Some hearts<img src=\"images/heart200.png\" width=\"20\" height=\"20\" align=\"bottom\"><img src=\"images/heart200.png\" width=\"30\" height=\"30\" align=\"bottom\"> <img src=\"images/heart200.png\" width=\"40\" height=\"40\"><img src=\"images/heart200.png\" width=\"50\" height=\"50\" align=\"bottom\">with different sizes."
+            }
+            TextWithImage {
+                text: "Resized image<img width=\"80\" height=\"76\" align=\"middle\" src=\"http://files.app4mobile.com/wp-content/uploads/2011/08/nokia-n9-price-specification-features-us-europe-india.jpg\">from the internet."
+            }
+            TextWithImage {
+                text: "Image<img align=\"middle\" src=\"http://qt.gitorious.org/images/sites/qt/logo.png\">from the internet."
+            }
+            TextWithImage {
+                height: 120
+                verticalAlignment: Text.AlignVCenter
+                text: "This is a <b>happy</b> face<img src=\"images/face-smile.png\"> with an explicit height."
+            }
+        }
+    }
+
+    Keys.onUpPressed: main.hAlign = Text.AlignHCenter
+    Keys.onLeftPressed: main.hAlign = Text.AlignLeft
+    Keys.onRightPressed: main.hAlign = Text.AlignRight
+}
diff --git a/examples/declarative/text/styledtext-layout.qml b/examples/declarative/text/styledtext-layout.qml
index c76dd44f40..291d75f109 100644
--- a/examples/declarative/text/styledtext-layout.qml
+++ b/examples/declarative/text/styledtext-layout.qml
@@ -3,37 +3,36 @@
 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/
 **
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
+** This file is part of the examples of the Qt Toolkit.
 **
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
 **
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
 **
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
 **
 ** $QT_END_LICENSE$
 **
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index 16fbc85b77..e7673478bd 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -58,12 +58,13 @@
 #include <QtGui/qguiapplication.h>
 #include <QtGui/qinputpanel.h>
 
-#include <private/qdeclarativestyledtext_p.h>
 #include <QtQuick/private/qdeclarativepixmapcache_p.h>
 
 #include <qmath.h>
 #include <limits.h>
 
+DEFINE_BOOL_CONFIG_OPTION(qmlTextDebug, QML_TEXT_DEBUG)
+
 QT_BEGIN_NAMESPACE
 
 extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled;
@@ -85,12 +86,12 @@ QQuickTextPrivate::QQuickTextPrivate()
   disableDistanceField(false), internalWidthUpdate(false),
   requireImplicitWidth(false), truncated(false), hAlignImplicit(true), rightToLeftText(false),
   layoutTextElided(false), richTextAsImage(false), textureImageCacheDirty(false), textHasChanged(true),
-  naturalWidth(0), doc(0), elipsisLayout(0), textLine(0), nodeType(NodeIsNull), updateType(UpdatePaintNode)
+  needToUpdateLayout(false), naturalWidth(0), doc(0), elipsisLayout(0), textLine(0), nodeType(NodeIsNull),
+  updateType(UpdatePaintNode), nbActiveDownloads(0)
 
 #if defined(Q_OS_MAC)
 , layoutThread(0), paintingThread(0)
 #endif
-
 {
     cacheAllTextAsImage = enableImageCache();
     disableDistanceField = qmlDisableDistanceField();
@@ -266,6 +267,8 @@ QQuickTextPrivate::~QQuickTextPrivate()
     delete elipsisLayout;
     delete textLine; textLine = 0;
     delete imageCache;
+    qDeleteAll(imgTags);
+    imgTags.clear();
 }
 
 qreal QQuickTextPrivate::getImplicitWidth() const
@@ -295,6 +298,11 @@ void QQuickTextPrivate::updateLayout()
     }
     updateOnComponentComplete = false;
     layoutTextElided = false;
+
+    if (!visibleImgTags.isEmpty())
+        visibleImgTags.clear();
+    needToUpdateLayout = false;
+
     // Setup instance of QTextLayout for all cases other than richtext
     if (!richText) {
         if (elipsisLayout) {
@@ -329,7 +337,7 @@ void QQuickTextPrivate::updateLayout()
         } else {
             singleline = false;
             if (textHasChanged) {
-                QDeclarativeStyledText::parse(text, layout);
+                QDeclarativeStyledText::parse(text, layout, imgTags, qmlContext(q), !maximumLineCountValid);
                 textHasChanged = false;
             }
         }
@@ -346,6 +354,41 @@ void QQuickTextPrivate::updateLayout()
     }
 
     updateSize();
+
+    if (needToUpdateLayout) {
+        needToUpdateLayout = false;
+        textHasChanged = true;
+        updateLayout();
+    }
+}
+
+void QQuickText::imageDownloadFinished()
+{
+    Q_D(QQuickText);
+
+    (d->nbActiveDownloads)--;
+
+    // when all the remote images have been downloaded,
+    // if one of the sizes was not specified at parsing time
+    // we use the implicit size from pixmapcache and re-layout.
+
+    if (d->nbActiveDownloads == 0) {
+        bool needToUpdateLayout = false;
+        foreach (QDeclarativeStyledTextImgTag *img, d->visibleImgTags) {
+            if (!img->size.isValid()) {
+                img->size = img->pix->implicitSize();
+                needToUpdateLayout = true;
+            }
+        }
+
+        if (needToUpdateLayout) {
+            d->textHasChanged = true;
+            d->updateLayout();
+        } else {
+            d->updateType = QQuickTextPrivate::UpdatePaintNode;
+            update();
+        }
+    }
 }
 
 void QQuickTextPrivate::updateSize()
@@ -659,6 +702,7 @@ QRect QQuickTextPrivate::setupTextLayout()
         lineWidth = INT_MAX;
     int linesLeft = maximumLineCount;
     int visibleTextLength = 0;
+
     forever {
         QTextLine line = layout.createLine();
         if (!line.isValid())
@@ -667,13 +711,10 @@ QRect QQuickTextPrivate::setupTextLayout()
         visibleCount++;
 
         qreal preLayoutHeight = height;
-        if (customLayout) {
+        if (customLayout)
             setupCustomLineGeometry(line, height);
-        } else if (lineWidth) {
-            line.setLineWidth(lineWidth);
-            line.setPosition(QPointF(line.position().x(), height));
-            height += (lineHeightMode == QQuickText::FixedHeight) ? lineHeight : line.height() * lineHeight;
-        }
+        else if (lineWidth)
+            setLineGeometry(line, lineWidth, height);
 
         bool elide = false;
         if (multilineElideEnabled && q->heightValid() && height > q->height()) {
@@ -682,7 +723,7 @@ QRect QQuickTextPrivate::setupTextLayout()
             if (visibleCount > 1) {
                 --visibleCount;
                 height = preLayoutHeight;
-                line.setLineWidth(0.0);
+                setLineGeometry(line, 0.0, height);
                 line.setPosition(QPointF(FLT_MAX,FLT_MAX));
                 line = layout.lineAt(visibleCount-1);
             }
@@ -693,13 +734,14 @@ QRect QQuickTextPrivate::setupTextLayout()
         if (elide || (maximumLineCountValid && --linesLeft == 0)) {
             if (visibleTextLength < text.length()) {
                 truncate = true;
+                height = preLayoutHeight;
                 if (multilineElideEnabled) {
                     qreal elideWidth = fm.width(elideChar);
                     // Need to correct for alignment
                     if (customLayout)
                         setupCustomLineGeometry(line, height, elideWidth);
                     else
-                        line.setLineWidth(lineWidth - elideWidth);
+                        setLineGeometry(line, lineWidth - elideWidth, height);
                     if (layout.text().mid(line.textStart(), line.textLength()).isRightToLeft()) {
                         line.setPosition(QPointF(line.position().x() + elideWidth, line.position().y()));
                         elidePos.setX(line.naturalTextRect().left() - elideWidth);
@@ -722,6 +764,7 @@ QRect QQuickTextPrivate::setupTextLayout()
         br = br.united(line.naturalTextRect());
     }
     layout.endLayout();
+    br.moveTop(0);
 
     //Update truncated
     if (truncated != truncate) {
@@ -740,10 +783,71 @@ QRect QQuickTextPrivate::setupTextLayout()
         lineCount = visibleCount;
         emit q->lineCountChanged();
     }
-
     return QRect(qRound(br.x()), qRound(br.y()), qCeil(br.width()), qCeil(br.height()));
 }
 
+void QQuickTextPrivate::setLineGeometry(QTextLine &line, qreal lineWidth, qreal &height)
+{
+    Q_Q(QQuickText);
+    line.setLineWidth(lineWidth);
+
+    if (imgTags.isEmpty()) {
+        line.setPosition(QPointF(line.position().x(), height));
+        height += (lineHeightMode == QQuickText::FixedHeight) ? lineHeight : line.height() * lineHeight;
+        return;
+    }
+
+    qreal textTop = 0;
+    qreal textHeight = line.height();
+    qreal totalLineHeight = textHeight;
+
+    QList<QDeclarativeStyledTextImgTag *> imagesInLine;
+
+    foreach (QDeclarativeStyledTextImgTag *image, imgTags) {
+        if (image->position >= line.textStart() &&
+            image->position < line.textStart() + line.textLength()) {
+
+            if (!image->pix) {
+                QUrl url = qmlContext(q)->resolvedUrl(image->url);
+                image->pix = new QDeclarativePixmap(qmlEngine(q), url, image->size);
+                if (image->pix->isLoading()) {
+                    image->pix->connectFinished(q, SLOT(imageDownloadFinished()));
+                    nbActiveDownloads++;
+                } else if (image->pix->isReady()) {
+                    if (!image->size.isValid()) {
+                        image->size = image->pix->implicitSize();
+                        // if the size of the image was not explicitly set, we need to
+                        // call updateLayout() once again.
+                        needToUpdateLayout = true;
+                    }
+                } else if (image->pix->isError()) {
+                    qmlInfo(q) << image->pix->error();
+                }
+            }
+
+            qreal ih = qreal(image->size.height());
+            if (image->align == QDeclarativeStyledTextImgTag::Top)
+                image->pos.setY(0);
+            else if (image->align == QDeclarativeStyledTextImgTag::Middle)
+                image->pos.setY((textHeight / 2.0) - (ih / 2.0));
+            else
+                image->pos.setY(textHeight - ih);
+            imagesInLine << image;
+            textTop = qMax(textTop, qAbs(image->pos.y()));
+        }
+    }
+
+    foreach (QDeclarativeStyledTextImgTag *image, imagesInLine) {
+        totalLineHeight = qMax(totalLineHeight, textTop + image->pos.y() + image->size.height());
+        image->pos.setX(line.cursorToX(image->position));
+        image->pos.setY(image->pos.y() + height + textTop);
+        visibleImgTags << image;
+    }
+
+    line.setPosition(QPointF(line.position().x(), height + textTop));
+    height += (lineHeightMode == QQuickText::FixedHeight) ? lineHeight : totalLineHeight * lineHeight;
+}
+
 /*!
     Returns a painted version of the QQuickTextPrivate::layout QTextLayout.
     If \a drawStyle is true, the style color overrides all colors in the document.
@@ -1251,6 +1355,8 @@ void QQuickText::setText(const QString &n)
         d->determineHorizontalAlignment();
     }
     d->textHasChanged = true;
+    qDeleteAll(d->imgTags);
+    d->imgTags.clear();
     d->updateLayout();
     emit textChanged(d->text);
 }
@@ -1629,6 +1735,7 @@ void QQuickText::resetMaximumLineCount()
     <font color="color_name" size="1-7"></font>
     <h1> to <h6> - headers
     <a href=""> - anchor
+    <img src="" align="top,middle,bottom" width="" height=""> - inline images
     <ol type="">, <ul type=""> and <li> - ordered and unordered lists
     <pre></pre> - preformatted
     &gt; &lt; &amp;
@@ -1947,6 +2054,24 @@ QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data
                 node->addTextLayout(QPoint(0, bounds.y()), d->elipsisLayout, d->color, d->style, d->styleColor);
         }
 
+        foreach (QDeclarativeStyledTextImgTag *img, d->visibleImgTags) {
+            if (qmlTextDebug()) {
+                QSGRectangleNode *rectangle = d->sceneGraphContext()->createRectangleNode();
+                rectangle->setRect(QRectF(img->pos.x(), img->pos.y() + bounds.y(),img->size.width(), img->size.height()));
+                rectangle->setColor(QColor("red"));
+                rectangle->update();
+                node->appendChildNode(rectangle);
+            }
+            QDeclarativePixmap *pix = img->pix;
+            if (pix && pix->isReady()) {
+                QSGTexture *texture = d->sceneGraphContext()->textureForFactory(pix->textureFactory());
+                QSGImageNode *imgnode = d->sceneGraphContext()->createImageNode();
+                imgnode->setTexture(texture);
+                imgnode->setTargetRect(QRectF(img->pos.x(), img->pos.y() + bounds.y(), pix->width(), pix->height()));
+                node->appendChildNode(imgnode);
+                imgnode->update();
+            }
+        }
         return node;
     }
 }
diff --git a/src/quick/items/qquicktext_p.h b/src/quick/items/qquicktext_p.h
index 0725f53c66..ddc9d38c75 100644
--- a/src/quick/items/qquicktext_p.h
+++ b/src/quick/items/qquicktext_p.h
@@ -44,9 +44,7 @@
 #define QQUICKTEXT_P_H
 
 #include "qquickimplicitsizeitem_p.h"
-
 #include <private/qtquickglobal_p.h>
-
 #include <QtGui/qtextoption.h>
 
 QT_BEGIN_HEADER
@@ -212,6 +210,7 @@ protected:
 private Q_SLOTS:
     void q_imagesLoaded();
     void triggerPreprocess();
+    void imageDownloadFinished();
 
 private:
     Q_DISABLE_COPY(QQuickText)
diff --git a/src/quick/items/qquicktext_p_p.h b/src/quick/items/qquicktext_p_p.h
index 40c50378f0..e7b0478e21 100644
--- a/src/quick/items/qquicktext_p_p.h
+++ b/src/quick/items/qquicktext_p_p.h
@@ -60,6 +60,7 @@
 #include <QtDeclarative/qdeclarative.h>
 #include <QtGui/qabstracttextdocumentlayout.h>
 #include <QtGui/qtextlayout.h>
+#include <private/qdeclarativestyledtext_p.h>
 
 QT_BEGIN_NAMESPACE
 
@@ -82,6 +83,7 @@ public:
     void mirrorChange();
     QTextDocument *textDocument();
     bool isLineLaidOutConnected();
+    void setLineGeometry(QTextLine &line, qreal lineWidth, qreal &height);
 
     QString text;
     QUrl baseUrl;
@@ -127,6 +129,7 @@ public:
     bool richTextAsImage:1;
     bool textureImageCacheDirty:1;
     bool textHasChanged:1;
+    bool needToUpdateLayout:1;
 
     QRect layedOutTextRect;
     QSize paintedSize;
@@ -168,6 +171,10 @@ public:
     };
     UpdateType updateType;
 
+    QList<QDeclarativeStyledTextImgTag*> imgTags;
+    QList<QDeclarativeStyledTextImgTag*> visibleImgTags;
+    int nbActiveDownloads;
+
 #if defined(Q_OS_MAC)
     QList<QRectF> linesRects;
     QThread *layoutThread;
diff --git a/src/quick/util/qdeclarativestyledtext.cpp b/src/quick/util/qdeclarativestyledtext.cpp
index d34601d09f..39ea6b1a22 100644
--- a/src/quick/util/qdeclarativestyledtext.cpp
+++ b/src/quick/util/qdeclarativestyledtext.cpp
@@ -46,6 +46,7 @@
 #include <QDebug>
 #include <qmath.h>
 #include "qdeclarativestyledtext_p.h"
+#include <QDeclarativeContext>
 
 /*
     QDeclarativeStyledText supports few tags:
@@ -61,6 +62,7 @@
     <a href=""> - anchor
     <ol type="">, <ul type=""> and <li> - ordered and unordered lists
     <pre></pre> - preformated
+    <img src=""> - images
 
     The opening and closing tags must be correctly nested.
 */
@@ -79,9 +81,12 @@ public:
         ListFormat format;
     };
 
-    QDeclarativeStyledTextPrivate(const QString &t, QTextLayout &l)
-        : text(t), layout(l), baseFont(layout.font()), hasNewLine(false)
-        , preFormat(false), prependSpace(false), hasSpace(true)
+    QDeclarativeStyledTextPrivate(const QString &t, QTextLayout &l,
+                                  QList<QDeclarativeStyledTextImgTag*> &imgTags,
+                                  QDeclarativeContext *context,
+                                  bool preloadImages)
+        : text(t), layout(l), imgTags(&imgTags), baseFont(layout.font()), hasNewLine(false), nbImages(0), updateImagePositions(false)
+        , preFormat(false), prependSpace(false), hasSpace(true), preloadImages(preloadImages), context(context)
     {
     }
 
@@ -94,6 +99,7 @@ public:
     bool parseOrderedListAttributes(const QChar *&ch, const QString &textIn);
     bool parseUnorderedListAttributes(const QChar *&ch, const QString &textIn);
     bool parseAnchorAttributes(const QChar *&ch, const QString &textIn, QTextCharFormat &format);
+    void parseImageAttributes(const QChar *&ch, const QString &textIn, QString &textOut);
     QPair<QStringRef,QStringRef> parseAttribute(const QChar *&ch, const QString &textIn);
     QStringRef parseValue(const QChar *&ch, const QString &textIn);
 
@@ -108,12 +114,17 @@ public:
 
     QString text;
     QTextLayout &layout;
+    QList<QDeclarativeStyledTextImgTag*> *imgTags;
     QFont baseFont;
     QStack<List> listStack;
     bool hasNewLine;
+    int nbImages;
+    bool updateImagePositions;
     bool preFormat;
     bool prependSpace;
     bool hasSpace;
+    bool preloadImages;
+    QDeclarativeContext *context;
 
     static const QChar lessThan;
     static const QChar greaterThan;
@@ -143,8 +154,10 @@ const QChar QDeclarativeStyledTextPrivate::square(0x25a1);
 const QChar QDeclarativeStyledTextPrivate::lineFeed(QLatin1Char('\n'));
 const QChar QDeclarativeStyledTextPrivate::space(QLatin1Char(' '));
 
-QDeclarativeStyledText::QDeclarativeStyledText(const QString &string, QTextLayout &layout)
-: d(new QDeclarativeStyledTextPrivate(string, layout))
+QDeclarativeStyledText::QDeclarativeStyledText(const QString &string, QTextLayout &layout,
+                                               QList<QDeclarativeStyledTextImgTag*> &imgTags, QDeclarativeContext *context,
+                                               bool preloadImages)
+    : d(new QDeclarativeStyledTextPrivate(string, layout, imgTags, context, preloadImages))
 {
 }
 
@@ -153,11 +166,13 @@ QDeclarativeStyledText::~QDeclarativeStyledText()
     delete d;
 }
 
-void QDeclarativeStyledText::parse(const QString &string, QTextLayout &layout)
+void QDeclarativeStyledText::parse(const QString &string, QTextLayout &layout,
+                                   QList<QDeclarativeStyledTextImgTag*> &imgTags, QDeclarativeContext *context,
+                                   bool preloadImages)
 {
     if (string.isEmpty())
         return;
-    QDeclarativeStyledText styledText(string, layout);
+    QDeclarativeStyledText styledText(string, layout, imgTags, context, preloadImages);
     styledText.d->parse();
 }
 
@@ -169,6 +184,8 @@ void QDeclarativeStyledTextPrivate::parse()
     QString drawText;
     drawText.reserve(text.count());
 
+    updateImagePositions = !imgTags->isEmpty();
+
     int textStart = 0;
     int textLength = 0;
     int rangeStart = 0;
@@ -401,6 +418,10 @@ bool QDeclarativeStyledTextPrivate::parseTag(const QChar *&ch, const QString &te
             if (tag == QLatin1String("a")) {
                 return parseAnchorAttributes(ch, textIn, format);
             }
+            if (tag == QLatin1String("img")) {
+                parseImageAttributes(ch, textIn, textOut);
+                return false;
+            }
             if (*ch == greaterThan || ch->isNull())
                 continue;
         } else if (*ch != slash) {
@@ -606,6 +627,69 @@ bool QDeclarativeStyledTextPrivate::parseAnchorAttributes(const QChar *&ch, cons
     return valid;
 }
 
+void QDeclarativeStyledTextPrivate::parseImageAttributes(const QChar *&ch, const QString &textIn, QString &textOut)
+{
+    qreal imgWidth = 0.0;
+
+    if (!updateImagePositions) {
+        QDeclarativeStyledTextImgTag *image = new QDeclarativeStyledTextImgTag;
+        image->position = textOut.length() + 1;
+
+        QPair<QStringRef,QStringRef> attr;
+        do {
+            attr = parseAttribute(ch, textIn);
+            if (attr.first == QLatin1String("src")) {
+                image->url =  QUrl(attr.second.toString());
+            } else if (attr.first == QLatin1String("width")) {
+                image->size.setWidth(attr.second.toString().toInt());
+            } else if (attr.first == QLatin1String("height")) {
+                image->size.setHeight(attr.second.toString().toInt());
+            } else if (attr.first == QLatin1String("align")) {
+                if (attr.second.toString() == QLatin1String("top")) {
+                    image->align = QDeclarativeStyledTextImgTag::Top;
+                } else if (attr.second.toString() == QLatin1String("middle")) {
+                    image->align = QDeclarativeStyledTextImgTag::Middle;
+                }
+            }
+        } while (!ch->isNull() && !attr.first.isEmpty());
+
+        if (preloadImages && !image->size.isValid()) {
+            // if we don't know its size but the image is a local image,
+            // we load it in the pixmap cache and save its implicit size
+            // to avoid a relayout later on.
+            QUrl url = context->resolvedUrl(image->url);
+            if (url.isLocalFile()) {
+                QDeclarativePixmap *pix = new QDeclarativePixmap(context->engine(), url, image->size);
+                if (pix && pix->isReady()) {
+                    image->size = pix->implicitSize();
+                    image->pix = pix;
+                }
+            }
+        }
+
+        imgWidth = image->size.width();
+        imgTags->append(image);
+
+    } else {
+        // if we already have a list of img tags for this text
+        // we only want to update the positions of these tags.
+        QDeclarativeStyledTextImgTag *image = imgTags->value(nbImages);
+        image->position = textOut.length() + 1;
+        imgWidth = image->size.width();
+        QPair<QStringRef,QStringRef> attr;
+        do {
+            attr = parseAttribute(ch, textIn);
+        } while (!ch->isNull() && !attr.first.isEmpty());
+        nbImages++;
+    }
+
+    QFontMetricsF fm(layout.font());
+    QString padding(qFloor(imgWidth / fm.width(QChar::Nbsp)), QChar::Nbsp);
+    textOut += QChar(' ');
+    textOut += padding;
+    textOut += QChar(' ');
+}
+
 QPair<QStringRef,QStringRef> QDeclarativeStyledTextPrivate::parseAttribute(const QChar *&ch, const QString &textIn)
 {
     skipSpace(ch);
diff --git a/src/quick/util/qdeclarativestyledtext_p.h b/src/quick/util/qdeclarativestyledtext_p.h
index f3e9fef457..1c9086e7d1 100644
--- a/src/quick/util/qdeclarativestyledtext_p.h
+++ b/src/quick/util/qdeclarativestyledtext_p.h
@@ -42,23 +42,55 @@
 #ifndef QDECLARATIVESTYLEDTEXT_H
 #define QDECLARATIVESTYLEDTEXT_H
 
-#include <QSizeF>
+#include <QSize>
+#include <QPointF>
+#include <QList>
+#include <QUrl>
+#include <QtQuick/private/qdeclarativepixmapcache_p.h>
 
 QT_BEGIN_NAMESPACE
 
-class QPainter;
-class QPointF;
-class QString;
+class QDeclarativeStyledTextImgTag;
 class QDeclarativeStyledTextPrivate;
-class QTextLayout;
+class QString;
+class QDeclarativeContext;
+
+class Q_AUTOTEST_EXPORT QDeclarativeStyledTextImgTag
+{
+public:
+    QDeclarativeStyledTextImgTag()
+        : position(0), align(QDeclarativeStyledTextImgTag::Bottom), pix(0)
+    { }
+
+    ~QDeclarativeStyledTextImgTag() { delete pix; }
+
+    enum Align {
+        Bottom,
+        Middle,
+        Top
+    };
+
+    QUrl url;
+    QPointF pos;
+    QSize size;
+    int position;
+    Align align;
+    QDeclarativePixmap *pix;
+};
 
 class Q_AUTOTEST_EXPORT QDeclarativeStyledText
 {
 public:
-    static void parse(const QString &string, QTextLayout &layout);
+    static void parse(const QString &string, QTextLayout &layout,
+                      QList<QDeclarativeStyledTextImgTag*> &imgTags,
+                      QDeclarativeContext *context,
+                      bool preloadImages);
 
 private:
-    QDeclarativeStyledText(const QString &string, QTextLayout &layout);
+    QDeclarativeStyledText(const QString &string, QTextLayout &layout,
+                           QList<QDeclarativeStyledTextImgTag*> &imgTags,
+                           QDeclarativeContext *context,
+                           bool preloadImages);
     ~QDeclarativeStyledText();
 
     QDeclarativeStyledTextPrivate *d;
diff --git a/tests/auto/qtquick2/qdeclarativestyledtext/tst_qdeclarativestyledtext.cpp b/tests/auto/qtquick2/qdeclarativestyledtext/tst_qdeclarativestyledtext.cpp
index 46acbb2db3..b4e0ba1b7a 100644
--- a/tests/auto/qtquick2/qdeclarativestyledtext/tst_qdeclarativestyledtext.cpp
+++ b/tests/auto/qtquick2/qdeclarativestyledtext/tst_qdeclarativestyledtext.cpp
@@ -41,7 +41,8 @@
 #include <qtest.h>
 #include <QtTest/QtTest>
 #include <QtGui/QTextLayout>
-#include <private/qdeclarativestyledtext_p.h>
+#include <QtCore/QList>
+#include <QtQuick/private/qdeclarativestyledtext_p.h>
 
 class tst_qdeclarativestyledtext : public QObject
 {
@@ -148,6 +149,7 @@ void tst_qdeclarativestyledtext::textOutput_data()
     QTest::newRow("space before bold") << "this is <b>bold</b>" << "this is bold" << (FormatList() << Format(Format::Bold, 8, 4));
     QTest::newRow("space leading bold") << "this is<b> bold</b>" << "this is bold" << (FormatList() << Format(Format::Bold, 7, 5));
     QTest::newRow("space trailing bold") << "this is <b>bold </b>" << "this is bold " << (FormatList() << Format(Format::Bold, 8, 5));
+    QTest::newRow("img") << "a<img src=\"blah.png\"/>b" << "a  b" << FormatList();
 }
 
 void tst_qdeclarativestyledtext::textOutput()
@@ -157,7 +159,8 @@ void tst_qdeclarativestyledtext::textOutput()
     QFETCH(FormatList, formats);
 
     QTextLayout layout;
-    QDeclarativeStyledText::parse(input, layout);
+    QList<QDeclarativeStyledTextImgTag*> imgTags;
+    QDeclarativeStyledText::parse(input, layout, imgTags, 0, false);
 
     QCOMPARE(layout.text(), output);
 
diff --git a/tests/auto/qtquick2/qquicktext/data/images/face-sad.png b/tests/auto/qtquick2/qquicktext/data/images/face-sad.png
new file mode 100644
index 0000000000000000000000000000000000000000..24188b7985f9e680a434394dd47c131bae0a977d
GIT binary patch
literal 6148
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
JRSJ;s{{b1Oo^t>I

literal 0
HcmV?d00001

diff --git a/tests/auto/qtquick2/qquicktext/data/images/heart200.png b/tests/auto/qtquick2/qquicktext/data/images/heart200.png
new file mode 100644
index 0000000000000000000000000000000000000000..cedd3ea608e3dab1a62dc29aa3e455b62b536309
GIT binary patch
literal 8248
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%0Ac|r82b9UDb{NTuxI~pI>(R32Hi3ng+^K8`s
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
LbzoJ>7NP$K;5bYb

literal 0
HcmV?d00001

diff --git a/tests/auto/qtquick2/qquicktext/data/images/starfish_2.png b/tests/auto/qtquick2/qquicktext/data/images/starfish_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..132c20ffd0234a590411c6ba1936249335664ac8
GIT binary patch
literal 18243
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

literal 0
HcmV?d00001

diff --git a/tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml b/tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml
new file mode 100644
index 0000000000..fbd64cc5bf
--- /dev/null
+++ b/tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml
@@ -0,0 +1,24 @@
+import QtQuick 2.0
+
+Item {
+    width: 300
+    height: 200
+
+    Text {
+        id: myText
+        objectName: "myText"
+        elide: Text.ElideRight
+        maximumLineCount: 2
+        width: 200
+        wrapMode: Text.WordWrap
+        text: "This is a sad face aligned to the top. Lorem ipsum dolor sit amet. Nulla sed turpis risus. Integer sit amet odio quis mauris varius venenatis<img src=\"images/face-sad.png\" width=\"30\" height=\"30\" align=\"top\">Lorem ipsum dolor sit amet. Nulla sed turpis risus. Integer sit amet odio quis mauris varius venenatis. Lorem ipsum dolor sit amet. Nulla sed turpis risus.Lorem ipsum dolor sit amet. Nulla sed turpis risus. Lorem ipsum dolor sit amet. Nulla sed turpis risus.Lorem ipsum dolor sit amet. Nulla sed turpis risus."
+    }
+
+    MouseArea {
+        anchors.fill: parent
+        onClicked: myText.width = 400
+
+    }
+}
+
+
diff --git a/tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml b/tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml
new file mode 100644
index 0000000000..baf5113e52
--- /dev/null
+++ b/tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml
@@ -0,0 +1,12 @@
+import QtQuick 2.0
+
+Rectangle {
+    id: main
+    width: 300; height: 400
+
+    Text {
+        id: myText
+        objectName: "myText"
+        text: ""
+    }
+}
diff --git a/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp b/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp
index 706276c52f..cac65196eb 100644
--- a/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp
@@ -107,6 +107,12 @@ private slots:
 
     void lineLaidOut();
 
+    void imgTagsAlign_data();
+    void imgTagsAlign();
+    void imgTagsMultipleImages();
+    void imgTagsElide();
+    void imgTagsUpdates();
+    void imgTagsError();
 
 private:
     QStringList standard;
@@ -1478,6 +1484,120 @@ void tst_qquicktext::lineLaidOut()
     delete canvas;
 }
 
+void tst_qquicktext::imgTagsAlign_data()
+{
+    QTest::addColumn<QString>("src");
+    QTest::addColumn<int>("imgHeight");
+    QTest::addColumn<QString>("align");
+    QTest::newRow("heart-bottom") << "data/images/heart200.png" << 181 <<  "bottom";
+    QTest::newRow("heart-middle") << "data/images/heart200.png" << 181 <<  "middle";
+    QTest::newRow("heart-top") << "data/images/heart200.png" << 181 <<  "top";
+    QTest::newRow("starfish-bottom") << "data/images/starfish_2.png" << 217 <<  "bottom";
+    QTest::newRow("starfish-middle") << "data/images/starfish_2.png" << 217 <<  "middle";
+    QTest::newRow("starfish-top") << "data/images/starfish_2.png" << 217 <<  "top";
+}
+
+void tst_qquicktext::imgTagsAlign()
+{
+    QFETCH(QString, src);
+    QFETCH(int, imgHeight);
+    QFETCH(QString, align);
+    QString componentStr = "import QtQuick 2.0\nText { text: \"This is a test <img src=\\\"" + src + "\\\" align=\\\"" + align + "\\\"> of image.\" }";
+    QDeclarativeComponent textComponent(&engine);
+    textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+    QQuickText *textObject = qobject_cast<QQuickText*>(textComponent.create());
+
+    QVERIFY(textObject != 0);
+    QVERIFY(textObject->height() == imgHeight);
+
+    QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(textObject);
+    QVERIFY(textPrivate != 0);
+
+    QRectF br = textPrivate->layout.boundingRect();
+    if (align == "bottom")
+        QVERIFY(br.y() == imgHeight - br.height());
+    else if (align == "middle")
+        QVERIFY(br.y() == imgHeight / 2.0 - br.height() / 2.0);
+    else if (align == "top")
+        QVERIFY(br.y() == 0);
+
+    delete textObject;
+}
+
+void tst_qquicktext::imgTagsMultipleImages()
+{
+    QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish<img src=\\\"data/images/starfish_2.png\\\" width=\\\"60\\\" height=\\\"60\\\" > and another one<img src=\\\"data/images/heart200.png\\\" width=\\\"85\\\" height=\\\"85\\\">.\" }";
+
+    QDeclarativeComponent textComponent(&engine);
+    textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+    QQuickText *textObject = qobject_cast<QQuickText*>(textComponent.create());
+
+    QVERIFY(textObject != 0);
+    QVERIFY(textObject->height() == 85);
+
+    QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(textObject);
+    QVERIFY(textPrivate != 0);
+    QVERIFY(textPrivate->visibleImgTags.count() == 2);
+
+    delete textObject;
+}
+
+void tst_qquicktext::imgTagsElide()
+{
+    QQuickView *canvas = createView(testFile("imgTagsElide.qml"));
+    QQuickText *myText = canvas->rootObject()->findChild<QQuickText*>("myText");
+    QVERIFY(myText != 0);
+
+    QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(myText);
+    QVERIFY(textPrivate != 0);
+    QVERIFY(textPrivate->visibleImgTags.count() == 0);
+    myText->setMaximumLineCount(20);
+    QTRY_VERIFY(textPrivate->visibleImgTags.count() == 1);
+
+    delete myText;
+    delete canvas;
+}
+
+void tst_qquicktext::imgTagsUpdates()
+{
+    QQuickView *canvas = createView(testFile("imgTagsUpdates.qml"));
+    QQuickText *myText = canvas->rootObject()->findChild<QQuickText*>("myText");
+    QVERIFY(myText != 0);
+
+    QSignalSpy spy(myText, SIGNAL(paintedSizeChanged()));
+
+    QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(myText);
+    QVERIFY(textPrivate != 0);
+
+    myText->setText("This is a heart<img src=\"images/heart200.png\">.");
+    QVERIFY(textPrivate->visibleImgTags.count() == 1);
+    QVERIFY(spy.count() == 1);
+
+    myText->setMaximumLineCount(2);
+    myText->setText("This is another heart<img src=\"images/heart200.png\">.");
+    QTRY_VERIFY(textPrivate->visibleImgTags.count() == 1);
+
+    // if maximumLineCount is set and the img tag doesn't have an explicit size
+    // we relayout twice.
+    QVERIFY(spy.count() == 3);
+
+    delete myText;
+    delete canvas;
+}
+
+void tst_qquicktext::imgTagsError()
+{
+    QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish<img src=\\\"data/images/starfish_2.pn\\\" width=\\\"60\\\" height=\\\"60\\\">.\" }";
+
+    QDeclarativeComponent textComponent(&engine);
+    QTest::ignoreMessage(QtWarningMsg, "file::2:1: QML Text: Cannot open: file:data/images/starfish_2.pn");
+    textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+    QQuickText *textObject = qobject_cast<QQuickText*>(textComponent.create());
+
+    QVERIFY(textObject != 0);
+    delete textObject;
+}
+
 QTEST_MAIN(tst_qquicktext)
 
 #include "tst_qquicktext.moc"
-- 
GitLab