Implement mask caching for a number of different sizes.
The number of cached masks is now capped in a rather brutal way, in practice it should work well for most cases. svn path=/trunk/KDE/kdelibs/; revision=1159649
This commit is contained in:
parent
87548d03c1
commit
1cef7c2a8d
12
framesvg.cpp
12
framesvg.cpp
@ -282,8 +282,15 @@ QPixmap FrameSvg::alphaMask() const
|
||||
QRegion FrameSvg::mask() const
|
||||
{
|
||||
FrameData *frame = d->frames[d->prefix];
|
||||
frame->cachedMask = QRegion(QBitmap(d->alphaMask().alphaChannel().createMaskFromColor(Qt::black)));
|
||||
return frame->cachedMask;
|
||||
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))));
|
||||
}
|
||||
return frame->cachedMasks[id];
|
||||
}
|
||||
|
||||
void FrameSvg::setCacheAllRenderedFrames(bool cache)
|
||||
@ -707,7 +714,6 @@ void FrameSvgPrivate::updateSizes() const
|
||||
QSize s = q->size();
|
||||
q->resize();
|
||||
frame->cachedBackground = QPixmap();
|
||||
frame->cachedMask = QRegion();
|
||||
|
||||
if (frame->enabledBorders & FrameSvg::TopBorder) {
|
||||
frame->topHeight = q->elementSize(prefix + "top").height();
|
||||
|
@ -69,7 +69,9 @@ public:
|
||||
|
||||
FrameSvg::EnabledBorders enabledBorders;
|
||||
QPixmap cachedBackground;
|
||||
QRegion cachedMask;
|
||||
QHash<QString, QRegion> cachedMasks;
|
||||
static const int MAX_CACHED_MASKS = 10;
|
||||
|
||||
QSize frameSize;
|
||||
|
||||
//measures
|
||||
|
Loading…
x
Reference in New Issue
Block a user