summaryrefslogtreecommitdiffstats
path: root/src/webenginequick/api/qquickwebenginefaviconprovider_p_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/webenginequick/api/qquickwebenginefaviconprovider_p_p.h')
-rw-r--r--src/webenginequick/api/qquickwebenginefaviconprovider_p_p.h50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/webenginequick/api/qquickwebenginefaviconprovider_p_p.h b/src/webenginequick/api/qquickwebenginefaviconprovider_p_p.h
index 922f8b3ac..68e23fbcf 100644
--- a/src/webenginequick/api/qquickwebenginefaviconprovider_p_p.h
+++ b/src/webenginequick/api/qquickwebenginefaviconprovider_p_p.h
@@ -53,13 +53,57 @@
#include <QtWebEngineQuick/private/qtwebenginequickglobal_p.h>
#include <QtCore/QList>
+#include <QtCore/QRunnable>
+#include <QtCore/QThreadPool>
+#include <QtGui/QImage>
#include <QtQuick/QQuickImageProvider>
QT_BEGIN_NAMESPACE
class QQuickWebEngineView;
-class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineFaviconProvider : public QQuickImageProvider
+class FaviconImageResponseRunnable : public QObject, public QRunnable
+{
+ Q_OBJECT
+
+public:
+ FaviconImageResponseRunnable(const QString &id, const QSize &requestedSize,
+ QList<QQuickWebEngineView *> *views);
+ void run() override;
+ void iconRequestDone(const QIcon &icon);
+
+signals:
+ void done(QPixmap pixmap);
+
+private:
+ int tryNextView();
+ void requestIconOnUIThread(QQuickWebEngineView *view);
+
+ QString m_id;
+ QSize m_requestedSize;
+ QList<QQuickWebEngineView *> *m_views;
+ int m_nextViewIndex = 0;
+};
+
+class FaviconImageResponse : public QQuickImageResponse
+{
+public:
+ FaviconImageResponse();
+ FaviconImageResponse(const QString &id, const QSize &requestedSize,
+ QList<QQuickWebEngineView *> *views, QThreadPool *pool);
+ ~FaviconImageResponse();
+ void handleDone(QPixmap pixmap);
+ QQuickTextureFactory *textureFactory() const override;
+
+private:
+ void startRunnable(const QString &id, const QSize &requestedSize,
+ QList<QQuickWebEngineView *> *views, QThreadPool *pool);
+
+ FaviconImageResponseRunnable *m_runnable = nullptr;
+ QImage m_image;
+};
+
+class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineFaviconProvider : public QQuickAsyncImageProvider
{
public:
static QString identifier();
@@ -71,9 +115,11 @@ public:
void attach(QQuickWebEngineView *view) { m_views.append(view); }
void detach(QQuickWebEngineView *view) { m_views.removeAll(view); }
- QPixmap requestPixmap(const QString &, QSize *, const QSize &) override;
+ QQuickImageResponse *requestImageResponse(const QString &id,
+ const QSize &requestedSize) override;
private:
+ QThreadPool m_pool;
QList<QQuickWebEngineView *> m_views;
};