aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorRoman Pasechnik <roman@pasechnik.net>2015-04-11 12:49:56 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-10-15 11:29:30 +0000
commitb63185824ea213c2d19472fee302f007151dd5ca (patch)
tree043683711ddfc7d31cda88afdb7b39cb0401dc9a /src/quick/items
parentc161a413ffeed9f7584adc26a727ddcdf06f8c33 (diff)
Fix QQuickTextDocumentWithImageResources image loading
QQuickTextDocumentWithImageResources always tries to load images itself and not using QTextDocument internal resources. What it should do: 1) Check if QTextDocument already has image resource and use it. 2) If not, try to load resource manually. Change-Id: Ifc4d919fc4a08b4efae50e06a42f1af7cee67af3 Task-number: QTBUG-32525 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Diffstat (limited to 'src/quick/items')
-rw-r--r--src/quick/items/qquicktext.cpp38
-rw-r--r--src/quick/items/qquicktext_p_p.h2
2 files changed, 18 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)