aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquicktext.cpp38
-rw-r--r--src/quick/items/qquicktext_p_p.h2
-rw-r--r--tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp16
3 files changed, 34 insertions, 22 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index 205571f2e7..f848d0baee 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -120,14 +120,15 @@ QQuickTextDocumentWithImageResources::~QQuickTextDocumentWithImageResources()
QVariant QQuickTextDocumentWithImageResources::loadResource(int type, const QUrl &name)
{
- QQmlContext *context = qmlContext(parent());
-
- if (type == QTextDocument::ImageResource) {
- QQuickPixmap *p = loadPixmap(context, name);
- return p->image();
+ QVariant resource = QTextDocument::loadResource(type, name);
+ if (resource.isNull() && type == QTextDocument::ImageResource) {
+ QQmlContext *context = qmlContext(parent());
+ QUrl url = baseUrl().resolved(name);
+ QQuickPixmap *p = loadPixmap(context, url);
+ resource = p->image();
}
- return QTextDocument::loadResource(type, name);
+ return resource;
}
void QQuickTextDocumentWithImageResources::requestFinished()
@@ -152,30 +153,28 @@ QSizeF QQuickTextDocumentWithImageResources::intrinsicSize(
QSizeF size(width, height);
if (!hasWidth || !hasHeight) {
- QQmlContext *context = qmlContext(parent());
- QUrl url = baseUrl().resolved(QUrl(imageFormat.name()));
-
- QQuickPixmap *p = loadPixmap(context, url);
- if (!p->isReady()) {
+ QVariant res = resource(QTextDocument::ImageResource, QUrl(imageFormat.name()));
+ QImage image = res.value<QImage>();
+ if (image.isNull()) {
if (!hasWidth)
size.setWidth(16);
if (!hasHeight)
size.setHeight(16);
return size;
}
- QSize implicitSize = p->implicitSize();
+ QSize imgSize = image.size();
if (!hasWidth) {
if (!hasHeight)
- size.setWidth(implicitSize.width());
+ size.setWidth(imgSize.width());
else
- size.setWidth(qRound(height * (implicitSize.width() / (qreal) implicitSize.height())));
+ size.setWidth(qRound(height * (imgSize.width() / (qreal) imgSize.height())));
}
if (!hasHeight) {
if (!hasWidth)
- size.setHeight(implicitSize.height());
+ size.setHeight(imgSize.height());
else
- size.setHeight(qRound(width * (implicitSize.height() / (qreal) implicitSize.width())));
+ size.setHeight(qRound(width * (imgSize.height() / (qreal) imgSize.width())));
}
}
return size;
@@ -190,11 +189,8 @@ void QQuickTextDocumentWithImageResources::drawObject(
QImage QQuickTextDocumentWithImageResources::image(const QTextImageFormat &format)
{
- QQmlContext *context = qmlContext(parent());
- QUrl url = baseUrl().resolved(QUrl(format.name()));
-
- QQuickPixmap *p = loadPixmap(context, url);
- return p->image();
+ QVariant res = resource(QTextDocument::ImageResource, QUrl(format.name()));
+ return res.value<QImage>();
}
void QQuickTextDocumentWithImageResources::reset()
diff --git a/src/quick/items/qquicktext_p_p.h b/src/quick/items/qquicktext_p_p.h
index cd14008728..28435bc8c5 100644
--- a/src/quick/items/qquicktext_p_p.h
+++ b/src/quick/items/qquicktext_p_p.h
@@ -179,7 +179,7 @@ public:
};
class QQuickPixmap;
-class QQuickTextDocumentWithImageResources : public QTextDocument, public QTextObjectInterface
+class Q_AUTOTEST_EXPORT QQuickTextDocumentWithImageResources : public QTextDocument, public QTextObjectInterface
{
Q_OBJECT
Q_INTERFACES(QTextObjectInterface)
diff --git a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
index 27a02377bd..302959dd7f 100644
--- a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
+++ b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp
@@ -36,6 +36,7 @@
#include <QtQuick/QQuickTextDocument>
#include <QtQuick/QQuickItem>
#include <QtQuick/private/qquicktextedit_p.h>
+#include <QtQuick/private/qquicktext_p_p.h>
#include <QtGui/QTextDocument>
#include <QtGui/QTextDocumentWriter>
#include <QtQml/QQmlEngine>
@@ -47,6 +48,7 @@ class tst_qquicktextdocument : public QQmlDataTest
Q_OBJECT
private slots:
void textDocumentWriter();
+ void textDocumentWithImage();
};
QString text = QStringLiteral("foo bar");
@@ -74,6 +76,20 @@ void tst_qquicktextdocument::textDocumentWriter()
delete o;
}
+void tst_qquicktextdocument::textDocumentWithImage()
+{
+ QQuickTextDocumentWithImageResources document(0);
+ QImage image(1, 1, QImage::Format_Mono);
+ image.fill(1);
+
+ QString name = "image";
+ document.addResource(QTextDocument::ImageResource, name, image);
+ QTextImageFormat format;
+ format.setName(name);
+ QCOMPARE(image, document.image(format));
+ QCOMPARE(image, document.resource(QTextDocument::ImageResource, name).value<QImage>());
+}
+
QTEST_MAIN(tst_qquicktextdocument)
#include "tst_qquicktextdocument.moc"