don't hang on to the overlay in FrameSvg, rely on the pixmap cache for that
svn path=/trunk/KDE/kdelibs/; revision=1029052
This commit is contained in:
parent
1a7416e23b
commit
79a826e17c
41
framesvg.cpp
41
framesvg.cpp
@ -389,11 +389,9 @@ void FrameSvgPrivate::generateBackground(FrameData *frame)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QSizeF size = frameSize(frame);
|
QSizeF size = frameSize(frame);
|
||||||
QString id = QString::fromLatin1("%5_%4_%3_%2_%1_").
|
const QString id = QString::fromLatin1("%5_%4_%3_%2_%1_").
|
||||||
arg(frame->enabledBorders).arg(size.width()).arg(size.height()).arg(prefix).arg(q->imagePath());
|
arg(frame->enabledBorders).arg(size.width()).arg(size.height()).arg(prefix).arg(q->imagePath());
|
||||||
|
|
||||||
|
|
||||||
Theme *theme = Theme::defaultTheme();
|
Theme *theme = Theme::defaultTheme();
|
||||||
if (q->isUsingRenderingCache()) {
|
if (q->isUsingRenderingCache()) {
|
||||||
@ -562,10 +560,11 @@ void FrameSvgPrivate::generateBackground(FrameData *frame)
|
|||||||
|
|
||||||
//Overlays
|
//Overlays
|
||||||
QSize overlaySize;
|
QSize overlaySize;
|
||||||
frame->cachedOverlay = QPixmap();
|
QPixmap overlay;
|
||||||
if (!prefix.startsWith("mask-") && q->hasElement(prefix+"overlay") &&
|
bool overlayAlreadyCached = false;
|
||||||
!theme->findInCache(id, frame->cachedOverlay) &&
|
if (!prefix.startsWith("mask-") && q->hasElement(prefix + "overlay") &&
|
||||||
frame->cachedOverlay.isNull()) {
|
!(overlayAlreadyCached = theme->findInCache("overlay_" + id, overlay)) &&
|
||||||
|
overlay.isNull()) {
|
||||||
QPoint pos = QPoint(0, 0);
|
QPoint pos = QPoint(0, 0);
|
||||||
overlaySize = q->elementSize(prefix+"overlay");
|
overlaySize = q->elementSize(prefix+"overlay");
|
||||||
|
|
||||||
@ -584,8 +583,8 @@ void FrameSvgPrivate::generateBackground(FrameData *frame)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
frame->cachedOverlay = q->alphaMask();
|
overlay = q->alphaMask();
|
||||||
QPainter overlayPainter(&frame->cachedOverlay);
|
QPainter overlayPainter(&overlay);
|
||||||
overlayPainter.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
overlayPainter.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||||||
//Tiling?
|
//Tiling?
|
||||||
if (q->hasElement(prefix+"hint-overlay-tile-horizontal") ||
|
if (q->hasElement(prefix+"hint-overlay-tile-horizontal") ||
|
||||||
@ -602,16 +601,16 @@ void FrameSvgPrivate::generateBackground(FrameData *frame)
|
|||||||
overlayPainter.end();
|
overlayPainter.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
cacheFrame(prefix);
|
cacheFrame(prefix, frame->cachedBackground, overlay);
|
||||||
|
|
||||||
if (!frame->cachedOverlay.isNull()) {
|
if (!overlay.isNull()) {
|
||||||
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||||||
p.drawPixmap(overlayPos, frame->cachedOverlay, QRect(overlayPos, overlaySize));
|
p.drawPixmap(overlayPos, overlay, QRect(overlayPos, overlaySize));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void FrameSvgPrivate::cacheFrame(const QString &prefixToSave)
|
void FrameSvgPrivate::cacheFrame(const QString &prefixToSave, const QPixmap &background, const QPixmap &overlay)
|
||||||
{
|
{
|
||||||
if (!q->isUsingRenderingCache()) {
|
if (!q->isUsingRenderingCache()) {
|
||||||
return;
|
return;
|
||||||
@ -624,19 +623,21 @@ void FrameSvgPrivate::cacheFrame(const QString &prefixToSave)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSizeF size = frameSize(frame);
|
const QSizeF size = frameSize(frame);
|
||||||
QString id = QString::fromLatin1("%7_%6_%5_%4_%3_%2_%1_").
|
QString id = QString::fromLatin1("%7_%6_%5_%4_%3_%2_%1_").
|
||||||
arg(overlayPos.y()).arg(overlayPos.x()).arg(frame->enabledBorders).arg(size.width()).arg(size.height()).arg(prefixToSave).arg(q->imagePath());
|
arg(overlayPos.y()).arg(overlayPos.x()).arg(frame->enabledBorders).arg(size.width()).arg(size.height()).arg(prefixToSave).arg(q->imagePath());
|
||||||
|
|
||||||
//kDebug()<<"Saving to cache frame"<<id;
|
//kDebug()<<"Saving to cache frame"<<id;
|
||||||
|
|
||||||
Theme::defaultTheme()->insertIntoCache(id, frame->cachedBackground, QString::number((qint64)q, 16)+prefixToSave);
|
Theme::defaultTheme()->insertIntoCache(id, background, QString::number((qint64)q, 16)+prefixToSave);
|
||||||
|
|
||||||
//insert overlay
|
if (!overlay.isNull()) {
|
||||||
id = QString::fromLatin1("overlay_%7_%6_%5_%4_%3_%2_%1_").
|
//insert overlay
|
||||||
arg(overlayPos.y()).arg(overlayPos.x()).arg(frame->enabledBorders).arg(size.width()).arg(size.height()).arg(prefixToSave).arg(q->imagePath());
|
id = QString::fromLatin1("overlay_%7_%6_%5_%4_%3_%2_%1_").
|
||||||
|
arg(overlayPos.y()).arg(overlayPos.x()).arg(frame->enabledBorders).arg(size.width()).arg(size.height()).arg(prefixToSave).arg(q->imagePath());
|
||||||
|
|
||||||
Theme::defaultTheme()->insertIntoCache(id, frame->cachedOverlay, QString::number((qint64)q, 16)+prefixToSave+"overlay");
|
Theme::defaultTheme()->insertIntoCache(id, overlay, QString::number((qint64)q, 16) + prefixToSave + "overlay");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameSvgPrivate::updateSizes()
|
void FrameSvgPrivate::updateSizes()
|
||||||
|
@ -68,7 +68,6 @@ public:
|
|||||||
|
|
||||||
FrameSvg::EnabledBorders enabledBorders;
|
FrameSvg::EnabledBorders enabledBorders;
|
||||||
QPixmap cachedBackground;
|
QPixmap cachedBackground;
|
||||||
QPixmap cachedOverlay;
|
|
||||||
QRegion cachedMask;
|
QRegion cachedMask;
|
||||||
QSize frameSize;
|
QSize frameSize;
|
||||||
|
|
||||||
@ -108,7 +107,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void generateBackground(FrameData *frame);
|
void generateBackground(FrameData *frame);
|
||||||
void cacheFrame(const QString &prefix);
|
void cacheFrame(const QString &prefixToSave, const QPixmap &background, const QPixmap &overlay);
|
||||||
void updateSizes();
|
void updateSizes();
|
||||||
void updateNeeded();
|
void updateNeeded();
|
||||||
void updateAndSignalSizes();
|
void updateAndSignalSizes();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user