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 > < & @@ -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