if (basePixmap.isNull())
basePixmap.load(filename);
- int actualSize = qMin(size.width(), size.height());
+ QSize actualSize = basePixmap.size();
+ if (!actualSize.isNull() && (actualSize.width() > size.width() || actualSize.height() > size.height()))
+ actualSize.scale(size, Qt::KeepAspectRatio);
+
QString key = QLatin1String("$qt_theme_")
% HexString<qint64>(basePixmap.cacheKey())
% HexString<int>(mode)
% HexString<qint64>(QGuiApplication::palette().cacheKey())
- % HexString<int>(actualSize);
+ % HexString<int>(actualSize.width())
+ % HexString<int>(actualSize.height());
QPixmap cachedPixmap;
if (QPixmapCache::find(key, &cachedPixmap)) {
return cachedPixmap;
} else {
+ if (basePixmap.size() != actualSize)
+ basePixmap = basePixmap.scaled(actualSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
cachedPixmap = basePixmap;
if (QGuiApplication *guiApp = qobject_cast<QGuiApplication *>(qApp))
cachedPixmap = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(mode, basePixmap);
noIcon = QIcon::fromTheme("svg-icon", abIcon);
QVERIFY(!noIcon.availableSizes().isEmpty());
+ // Pixmaps should be no larger than the requested size (QTBUG-17953)
+ QCOMPARE(appointmentIcon.pixmap(22).size(), QSize(22, 22)); // exact
+ QCOMPARE(appointmentIcon.pixmap(32).size(), QSize(32, 32)); // exact
+ QCOMPARE(appointmentIcon.pixmap(48).size(), QSize(32, 32)); // smaller
+ QCOMPARE(appointmentIcon.pixmap(8).size(), QSize(8, 8)); // scaled down
+
QByteArray ba;
// write to QByteArray
{