aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qdeclarativepixmapcache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/util/qdeclarativepixmapcache.cpp')
-rw-r--r--src/quick/util/qdeclarativepixmapcache.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/quick/util/qdeclarativepixmapcache.cpp b/src/quick/util/qdeclarativepixmapcache.cpp
index 3670c58662..43ce3346cb 100644
--- a/src/quick/util/qdeclarativepixmapcache.cpp
+++ b/src/quick/util/qdeclarativepixmapcache.cpp
@@ -323,20 +323,22 @@ static bool readImage(const QUrl& url, QIODevice *dev, QImage *image, QString *e
force_scale = true;
}
- bool scaled = false;
if (requestSize.width() > 0 || requestSize.height() > 0) {
QSize s = imgio.size();
+ qreal ratio = 0.0;
if (requestSize.width() && (force_scale || requestSize.width() < s.width())) {
- if (requestSize.height() <= 0)
- s.setHeight(s.height()*requestSize.width()/s.width());
- s.setWidth(requestSize.width()); scaled = true;
+ ratio = qreal(requestSize.width())/s.width();
}
if (requestSize.height() && (force_scale || requestSize.height() < s.height())) {
- if (requestSize.width() <= 0)
- s.setWidth(s.width()*requestSize.height()/s.height());
- s.setHeight(requestSize.height()); scaled = true;
+ qreal hr = qreal(requestSize.height())/s.height();
+ if (ratio == 0.0 || hr < ratio)
+ ratio = hr;
+ }
+ if (ratio > 0.0) {
+ s.setHeight(qRound(s.height() * ratio));
+ s.setWidth(qRound(s.width() * ratio));
+ imgio.setScaledSize(s);
}
- if (scaled) { imgio.setScaledSize(s); }
}
if (impsize)