summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTrond Kjernåsen <trond@trolltech.com>2009-04-24 09:00:05 (GMT)
committerTrond Kjernåsen <trond@trolltech.com>2009-04-24 09:03:05 (GMT)
commit56ef2860a03e67afcb66c0827f1f258c7ae7c86d (patch)
treed206ea4f0b87770c9d18d46068566fd932349a59 /src
parentf78a8f9c839969d3c3d2e9b4287bc62aa43f5f64 (diff)
downloadQt-56ef2860a03e67afcb66c0827f1f258c7ae7c86d.zip
Qt-56ef2860a03e67afcb66c0827f1f258c7ae7c86d.tar.gz
Qt-56ef2860a03e67afcb66c0827f1f258c7ae7c86d.tar.bz2
Fix a caching problem in QSvgIconEngine.
The QIcon::pixmap() call would always load and validate any svg file that was used for a QIcon, even though there was a cached pixmap for that particular size. Task-number: 248848 Reviewed-by: Kim
Diffstat (limited to 'src')
-rw-r--r--src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp b/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
index 7fdf81f..c7249d3 100644
--- a/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
+++ b/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
@@ -121,7 +121,7 @@ QSize QSvgIconEngine::actualSize(const QSize &size, QIcon::Mode mode,
if (!pm.isNull() && pm.size() == size)
return size;
}
-
+
QSvgRenderer renderer;
d->loadDataForModeAndState(&renderer, mode, state);
if (renderer.isValid()) {
@@ -158,9 +158,13 @@ void QSvgIconEnginePrivate::loadDataForModeAndState(QSvgRenderer *renderer, QIco
QPixmap QSvgIconEngine::pixmap(const QSize &size, QIcon::Mode mode,
QIcon::State state)
-{
+{
QPixmap pm;
+ QString pmckey(d->pmcKey(size, mode, state));
+ if (QPixmapCache::find(pmckey, pm))
+ return pm;
+
if (d->addedPixmaps) {
pm = d->addedPixmaps->value(d->hashKey(mode, state));
if (!pm.isNull() && pm.size() == size)
@@ -176,10 +180,6 @@ QPixmap QSvgIconEngine::pixmap(const QSize &size, QIcon::Mode mode,
if (!actualSize.isNull())
actualSize.scale(size, Qt::KeepAspectRatio);
- QString pmckey(d->pmcKey(actualSize, mode, state));
- if (QPixmapCache::find(pmckey, pm))
- return pm;
-
QImage img(actualSize, QImage::Format_ARGB32_Premultiplied);
img.fill(0x00000000);
QPainter p(&img);