diff options
Diffstat (limited to 'src/plugins/qmldesigner/designercore/imagecache/explicitimagecacheimageprovider.cpp')
-rw-r--r-- | src/plugins/qmldesigner/designercore/imagecache/explicitimagecacheimageprovider.cpp | 45 |
1 files changed, 11 insertions, 34 deletions
diff --git a/src/plugins/qmldesigner/designercore/imagecache/explicitimagecacheimageprovider.cpp b/src/plugins/qmldesigner/designercore/imagecache/explicitimagecacheimageprovider.cpp index a1bd876cfd..1f28d4eca6 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/explicitimagecacheimageprovider.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/explicitimagecacheimageprovider.cpp @@ -2,51 +2,23 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "explicitimagecacheimageprovider.h" +#include "imagecacheimageresponse.h" #include <asynchronousexplicitimagecache.h> #include <QMetaObject> #include <QQuickImageResponse> -namespace { - -class ImageResponse : public QQuickImageResponse -{ -public: - ImageResponse(const QImage &defaultImage) - : m_image(defaultImage) - {} - - QQuickTextureFactory *textureFactory() const override - { - return QQuickTextureFactory::textureFactoryForImage(m_image); - } - - void setImage(const QImage &image) - { - m_image = image; - - emit finished(); - } - - void abort() { emit finished(); } - -private: - QImage m_image; -}; - -} // namespace - namespace QmlDesigner { QQuickImageResponse *ExplicitImageCacheImageProvider::requestImageResponse(const QString &id, const QSize &) { - auto response = std::make_unique<::ImageResponse>(m_defaultImage); + auto response = std::make_unique<ImageCacheImageResponse>(m_defaultImage); m_cache.requestImage( id, - [response = QPointer<::ImageResponse>(response.get())](const QImage &image) { + [response = QPointer<ImageCacheImageResponse>(response.get())](const QImage &image) { QMetaObject::invokeMethod( response, [response, image] { @@ -55,15 +27,20 @@ QQuickImageResponse *ExplicitImageCacheImageProvider::requestImageResponse(const }, Qt::QueuedConnection); }, - [response = QPointer<::ImageResponse>(response.get())](ImageCache::AbortReason abortReason) { + [response = QPointer<ImageCacheImageResponse>(response.get()), + failedImage = m_failedImage](ImageCache::AbortReason abortReason) { QMetaObject::invokeMethod( response, - [response, abortReason] { + [response, abortReason, failedImage] { switch (abortReason) { - case ImageCache::AbortReason::Failed: + case ImageCache::AbortReason::NoEntry: if (response) response->abort(); break; + case ImageCache::AbortReason::Failed: + if (response) + response->setImage(failedImage); + break; case ImageCache::AbortReason::Abort: response->cancel(); break; |