summaryrefslogtreecommitdiffstats
path: root/src/webengine
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-09-21 15:01:20 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-09-22 14:22:13 +0200
commitbb6fffd1ad3168edc9d67492cca585084d8ae6b4 (patch)
tree4fc0bd0165e667a2e4121f6d3c090154d8e15030 /src/webengine
parente924a83f3638c38c17be607c8ec0492a53baf90d (diff)
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 <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'src/webengine')
-rw-r--r--src/webengine/api/qquickwebenginefaviconprovider.cpp23
1 files changed, 21 insertions, 2 deletions
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 <QtGui/QIcon>
#include <QtGui/QPixmap>
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#include <QtGui/qiconengine.h>
+#include <QtGui/private/qicon_p.h>
+#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();