diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index c0cb9bb6f7..5d52f01746 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -65,7 +65,6 @@ void Metadata::clear() init(); m_customIcons.clear(); m_customIconCacheKeys.clear(); - m_customIconScaledCacheKeys.clear(); m_customIconsOrder.clear(); m_customIconsHashes.clear(); m_customData->clear(); @@ -199,7 +198,7 @@ QPixmap Metadata::customIconPixmap(const QUuid& uuid) const return pixmap; } -QPixmap Metadata::customIconScaledPixmap(const QUuid& uuid, const QSize& size) const +QPixmap Metadata::customIconScaledPixmap(const QUuid& uuid, int size /*=16*/) const { QPixmap pixmap; @@ -207,8 +206,13 @@ QPixmap Metadata::customIconScaledPixmap(const QUuid& uuid, const QSize& size) c return pixmap; } - QImage image = m_customIcons.value(uuid).scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - pixmap = QPixmap::fromImage(image); + const auto cacheKey = QString("%1-%2").arg(uuid.toString(), size); + + if (!QPixmapCache::find(cacheKey, &pixmap)) { + QImage image = m_customIcons.value(uuid).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + pixmap = QPixmap::fromImage(image); + QPixmapCache::insert(cacheKey, pixmap); + } return pixmap; } @@ -223,7 +227,7 @@ QHash Metadata::customIcons() const return m_customIcons; } -QHash Metadata::customIconsScaledPixmaps(const QSize& size) const +QHash Metadata::customIconsScaledPixmaps(int size /*=16*/) const { QHash result; @@ -395,7 +399,6 @@ void Metadata::addCustomIcon(const QUuid& uuid, const QImage& icon) m_customIcons[uuid] = icon; // reset cache in case there is also an icon with that uuid m_customIconCacheKeys[uuid] = QPixmapCache::Key(); - m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key(); // remove all uuids to prevent duplicates in release mode m_customIconsOrder.removeAll(uuid); m_customIconsOrder.append(uuid); @@ -434,8 +437,6 @@ void Metadata::removeCustomIcon(const QUuid& uuid) m_customIcons.remove(uuid); QPixmapCache::remove(m_customIconCacheKeys.value(uuid)); m_customIconCacheKeys.remove(uuid); - QPixmapCache::remove(m_customIconScaledCacheKeys.value(uuid)); - m_customIconScaledCacheKeys.remove(uuid); m_customIconsOrder.removeAll(uuid); Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count()); emit metadataModified(); diff --git a/src/core/Metadata.h b/src/core/Metadata.h index 0bf591471b..35fe4e10bb 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -83,12 +83,12 @@ class Metadata : public QObject bool protectNotes() const; QImage customIcon(const QUuid& uuid) const; QPixmap customIconPixmap(const QUuid& uuid) const; - QPixmap customIconScaledPixmap(const QUuid& uuid, const QSize& size = {16, 16}) const; + QPixmap customIconScaledPixmap(const QUuid& uuid, int size=16) const; bool containsCustomIcon(const QUuid& uuid) const; QHash customIcons() const; QList customIconsOrder() const; bool recycleBinEnabled() const; - QHash customIconsScaledPixmaps(const QSize& size = {16, 16}) const; + QHash customIconsScaledPixmaps(int size=16) const; Group* recycleBin(); const Group* recycleBin() const; QDateTime recycleBinChanged() const; @@ -163,7 +163,6 @@ class Metadata : public QObject QHash m_customIcons; mutable QHash m_customIconCacheKeys; - mutable QHash m_customIconScaledCacheKeys; QList m_customIconsOrder; QHash m_customIconsHashes;