summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2019-11-12 10:46:00 +0100
committerEirik Aavitsland <eirik.aavitsland@qt.io>2019-11-15 11:55:05 +0000
commit54f5b8975055f1d48c74efab085acd6338aa1e3c (patch)
tree435992b30830a3f9579e09e8ddc9e53c9f0f39f4 /src/gui
parent9f48f1ebc21f783cd8bb7daab942d70aebf085bc (diff)
Fix: QIcon high dpi scaling when aspect ratio differs
When an icon engine is asked to produce a pixmap scaled to a certain size, it may return one with a different aspect ratio than requested. In particular, an SVG will use its own aspect ratio, as it should. QIcon's DPR calculation would break down in this case, resulting in ugly scaling. Fixes: QTBUG-79371 Change-Id: Id97049259dcee1a2980474250ef1163be5639085 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/image/qicon.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index df8220a0c6..0fe4cd45cb 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -165,6 +165,11 @@ QIconPrivate::QIconPrivate(QIconEngine *e)
qreal QIconPrivate::pixmapDevicePixelRatio(qreal displayDevicePixelRatio, const QSize &requestedSize, const QSize &actualSize)
{
QSize targetSize = requestedSize * displayDevicePixelRatio;
+ if ((actualSize.width() == targetSize.width() && actualSize.height() <= targetSize.height()) ||
+ (actualSize.width() <= targetSize.width() && actualSize.height() == targetSize.height())) {
+ // Correctly scaled for dpr, just having different aspect ratio
+ return displayDevicePixelRatio;
+ }
qreal scale = 0.5 * (qreal(actualSize.width()) / qreal(targetSize.width()) +
qreal(actualSize.height() / qreal(targetSize.height())));
return qMax(qreal(1.0), displayDevicePixelRatio *scale);