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
|
QRegion FrameSvg::mask() const
|
||||||
{
|
{
|
||||||
FrameData *frame = d->frames[d->prefix];
|
FrameData *frame = d->frames[d->prefix];
|
||||||
frame->cachedMask = QRegion(QBitmap(d->alphaMask().alphaChannel().createMaskFromColor(Qt::black)));
|
QString id = d->cacheId(frame, QString());
|
||||||
return frame->cachedMask;
|
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)
|
void FrameSvg::setCacheAllRenderedFrames(bool cache)
|
||||||
@ -707,7 +714,6 @@ void FrameSvgPrivate::updateSizes() const
|
|||||||
QSize s = q->size();
|
QSize s = q->size();
|
||||||
q->resize();
|
q->resize();
|
||||||
frame->cachedBackground = QPixmap();
|
frame->cachedBackground = QPixmap();
|
||||||
frame->cachedMask = QRegion();
|
|
||||||
|
|
||||||
if (frame->enabledBorders & FrameSvg::TopBorder) {
|
if (frame->enabledBorders & FrameSvg::TopBorder) {
|
||||||
frame->topHeight = q->elementSize(prefix + "top").height();
|
frame->topHeight = q->elementSize(prefix + "top").height();
|
||||||
|
@ -69,7 +69,9 @@ public:
|
|||||||
|
|
||||||
FrameSvg::EnabledBorders enabledBorders;
|
FrameSvg::EnabledBorders enabledBorders;
|
||||||
QPixmap cachedBackground;
|
QPixmap cachedBackground;
|
||||||
QRegion cachedMask;
|
QHash<QString, QRegion> cachedMasks;
|
||||||
|
static const int MAX_CACHED_MASKS = 10;
|
||||||
|
|
||||||
QSize frameSize;
|
QSize frameSize;
|
||||||
|
|
||||||
//measures
|
//measures
|
||||||
|
Loading…
x
Reference in New Issue
Block a user