diff options
Diffstat (limited to 'src/quick/items/qquickimagebase.cpp')
-rw-r--r-- | src/quick/items/qquickimagebase.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/quick/items/qquickimagebase.cpp b/src/quick/items/qquickimagebase.cpp index 619b3c299b..596cd7d63a 100644 --- a/src/quick/items/qquickimagebase.cpp +++ b/src/quick/items/qquickimagebase.cpp @@ -51,6 +51,17 @@ QT_BEGIN_NAMESPACE +bool isScalableImageFormat(const QUrl &url) +{ + if (url.scheme() == QLatin1String("image")) + return true; + + const QString stringUrl = url.path(QUrl::PrettyDecoded); + return stringUrl.endsWith(QLatin1String("svg")) + || stringUrl.endsWith(QLatin1String("svgz")) + || stringUrl.endsWith(QLatin1String("pdf")); +} + // This function gives derived classes the chance set the devicePixelRatio // if they're not happy with our implementation of it. bool QQuickImageBasePrivate::updateDevicePixelRatio(qreal targetDevicePixelRatio) @@ -58,17 +69,7 @@ bool QQuickImageBasePrivate::updateDevicePixelRatio(qreal targetDevicePixelRatio // QQuickImageProvider and SVG and PDF can generate a high resolution image when // 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; - } else { - QString stringUrl = url.path(QUrl::PrettyDecoded); - if (stringUrl.endsWith(QLatin1String("svg")) || - stringUrl.endsWith(QLatin1String("svgz")) || - stringUrl.endsWith(QLatin1String("pdf"))) { - setDevicePixelRatio = true; - } - } + const bool setDevicePixelRatio = isScalableImageFormat(url); if (setDevicePixelRatio) devicePixelRatio = targetDevicePixelRatio; @@ -326,8 +327,10 @@ void QQuickImageBase::loadPixmap(const QUrl &url, LoadPixmapOptions loadOptions) const qreal targetDevicePixelRatio = (window() ? window()->effectiveDevicePixelRatio() : qApp->devicePixelRatio()); d->devicePixelRatio = 1.0; bool updatedDevicePixelRatio = false; - if (d->sourcesize.isValid()) + if (d->sourcesize.isValid() + || (isScalableImageFormat(d->url) && d->url.scheme() != QLatin1String("image"))) { updatedDevicePixelRatio = d->updateDevicePixelRatio(targetDevicePixelRatio); + } if (!updatedDevicePixelRatio) { // (possible) local file: loadUrl and d->devicePixelRatio will be modified if @@ -343,7 +346,8 @@ void QQuickImageBase::loadPixmap(const QUrl &url, LoadPixmapOptions loadOptions) (loadOptions & HandleDPR) ? d->sourcesize * d->devicePixelRatio : QSize(), options, (loadOptions & UseProviderOptions) ? d->providerOptions : QQuickImageProviderOptions(), - d->currentFrame, d->frameCount); + d->currentFrame, d->frameCount, + d->devicePixelRatio); if (d->pix.isLoading()) { if (d->progress != 0.0) { |