From bb6fffd1ad3168edc9d67492cca585084d8ae6b4 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 21 Sep 2020 15:01:20 +0200 Subject: Fix favicon engine under device pixel scaling The QIcon::pixmap function does internal scaling messing up our intermediate structures. Change-Id: I727efd58a4cc948fa3e4b23539d97e8ca755d060 Reviewed-by: Peter Varga --- .../api/qquickwebenginefaviconprovider.cpp | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src/webengine') diff --git a/src/webengine/api/qquickwebenginefaviconprovider.cpp b/src/webengine/api/qquickwebenginefaviconprovider.cpp index 3255f22be..f817e4016 100644 --- a/src/webengine/api/qquickwebenginefaviconprovider.cpp +++ b/src/webengine/api/qquickwebenginefaviconprovider.cpp @@ -47,6 +47,11 @@ #include #include +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +#include +#include +#endif + QT_BEGIN_NAMESPACE using QtWebEngineCore::FaviconInfo; @@ -113,6 +118,20 @@ void QQuickWebEngineFaviconProvider::detach(QQuickWebEngineView *view) delete iconUrls; } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +static QPixmap getUnscaledPixmap(QIcon icon, const QSize &size) +{ + QPixmap pixmap = icon.data_ptr()->engine->pixmap(size, QIcon::Normal, QIcon::Off); + pixmap.setDevicePixelRatio(1.0); + return pixmap; +} +#else +static QPixmap getUnscaledPixmap(const QIcon &icon, const QSize &size) +{ + return icon.pixmap(size, 1.0); +} +#endif + QPixmap QQuickWebEngineFaviconProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) { Q_UNUSED(size); @@ -138,11 +157,11 @@ QPixmap QQuickWebEngineFaviconProvider::requestPixmap(const QString &id, QSize * if (size) *size = bestSize; - return icon.pixmap(bestSize).copy(); + return getUnscaledPixmap(icon, bestSize).copy(); } const QSize &fitSize = findFitSize(icon.availableSizes(), requestedSize, bestSize); - const QPixmap &iconPixmap = icon.pixmap(fitSize); + const QPixmap &iconPixmap = getUnscaledPixmap(icon, fitSize); if (size) *size = iconPixmap.size(); -- cgit v1.2.3