aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2021-07-20 16:54:00 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-07-23 08:43:02 +0000
commit4a878256bd283921c02f135174db0fa6f1fe39eb (patch)
tree54a080c2edb5324c5ad544ba70b96c77264e5594
parenteb176de8108509a40b6450775ab5a0f2f684bffc (diff)
Update QQuickImage's DPR if re-loading the image didn't
An SVG doesn't have a DPR, but we need to reload and repaint it anyway when the DPR of the screen changes. So store the DPR of the item explicitly if reloading it didn't change the value (for instance, because sourceSize was not set). Otherwise, DPR changes are only handled when moving from a 1.0 (the default) DPR display to a different display, but not when moving back. Fixes: QTBUG-94622 Change-Id: I9f0a847699ab027ef876e341b8c6a954a6167ab3 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> (cherry picked from commit 08838f434b55024d9d5a9252fc2a3fb782b087da) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/quick/items/qquickimagebase.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/quick/items/qquickimagebase.cpp b/src/quick/items/qquickimagebase.cpp
index 750b71b25e..64c9d6abcf 100644
--- a/src/quick/items/qquickimagebase.cpp
+++ b/src/quick/items/qquickimagebase.cpp
@@ -56,8 +56,8 @@ QT_BEGIN_NAMESPACE
bool QQuickImageBasePrivate::updateDevicePixelRatio(qreal targetDevicePixelRatio)
{
// QQuickImageProvider and SVG and PDF can generate a high resolution image when
- // sourceSize is set (this function is only called if it's set).
- // If sourceSize is not set then the provider default size will be used, as usual.
+ // sourceSize is set. If sourceSize is not set then the provider default size will
+ // be used, as usual.
bool setDevicePixelRatio = false;
if (url.scheme() == QLatin1String("image")) {
setDevicePixelRatio = true;
@@ -419,10 +419,14 @@ void QQuickImageBase::itemChange(ItemChange change, const ItemChangeData &value)
Q_D(QQuickImageBase);
// If the screen DPI changed, reload image.
if (change == ItemDevicePixelRatioHasChanged && value.realValue != d->devicePixelRatio) {
+ const auto oldDpr = d->devicePixelRatio;
// ### how can we get here with !qmlEngine(this)? that implies
// itemChange() on an item pending deletion, which seems strange.
if (qmlEngine(this) && isComponentComplete() && d->url.isValid()) {
load();
+ // not changed when loading (sourceSize might not be set)
+ if (d->devicePixelRatio == oldDpr)
+ d->updateDevicePixelRatio(value.realValue);
}
}
QQuickItem::itemChange(change, value);