From 804a0d34da6be53b9d254e7a1d721a07969e04ec Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Fri, 11 Jul 2014 18:37:43 +0200 Subject: [PATCH] Fix cache implementation It was weird. Reviewed by the Handa-man. --- src/plasma/framesvg.cpp | 14 +++++++------- src/plasma/private/framesvg_p.h | 4 +++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/plasma/framesvg.cpp b/src/plasma/framesvg.cpp index acc2ffd1a..eabafa6d2 100644 --- a/src/plasma/framesvg.cpp +++ b/src/plasma/framesvg.cpp @@ -497,14 +497,14 @@ QRegion FrameSvg::mask() const { FrameData *frame = d->frames[d->prefix]; QString id = d->cacheId(frame, QString()); - if (!frame->cachedMasks.contains(id)) { - //TODO: Implement a better way to cap the number of cached masks - if (frame->cachedMasks.count() > frame->MAX_CACHED_MASKS) { - frame->cachedMasks.clear(); - } - frame->cachedMasks.insert(id, QRegion(QBitmap(d->alphaMask().alphaChannel().createMaskFromColor(Qt::black)))); + + QRegion* obj = frame->cachedMasks.object(id); + + if (!obj) { + obj = new QRegion(QBitmap(d->alphaMask().alphaChannel().createMaskFromColor(Qt::black))); + frame->cachedMasks.insert(id, obj); } - return frame->cachedMasks[id]; + return *obj; } void FrameSvg::setCacheAllRenderedFrames(bool cache) diff --git a/src/plasma/private/framesvg_p.h b/src/plasma/private/framesvg_p.h index b8d24456e..1f5211ad6 100644 --- a/src/plasma/private/framesvg_p.h +++ b/src/plasma/private/framesvg_p.h @@ -22,6 +22,7 @@ #define PLASMA_FRAMESVG_P_H #include +#include #include #include @@ -57,6 +58,7 @@ public: FrameData(const FrameData &other, FrameSvg *svg) : prefix(other.prefix), enabledBorders(other.enabledBorders), + cachedMasks(MAX_CACHED_MASKS), frameSize(other.frameSize), topHeight(0), leftWidth(0), @@ -85,7 +87,7 @@ public: QString prefix; FrameSvg::EnabledBorders enabledBorders; QPixmap cachedBackground; - QHash cachedMasks; + QCache cachedMasks; static const int MAX_CACHED_MASKS = 10; QSize frameSize;