summaryrefslogtreecommitdiffstats
path: root/src/printsupport/kernel/qpaintengine_alpha.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/printsupport/kernel/qpaintengine_alpha.cpp')
-rw-r--r--src/printsupport/kernel/qpaintengine_alpha.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/printsupport/kernel/qpaintengine_alpha.cpp b/src/printsupport/kernel/qpaintengine_alpha.cpp
index a81f3eae43..79026e5762 100644
--- a/src/printsupport/kernel/qpaintengine_alpha.cpp
+++ b/src/printsupport/kernel/qpaintengine_alpha.cpp
@@ -186,7 +186,8 @@ void QAlphaPaintEngine::drawPolygon(const QPointF *points, int pointCount, Polyg
Q_D(QAlphaPaintEngine);
QPolygonF poly;
- for (int i=0; i<pointCount; ++i)
+ poly.reserve(pointCount);
+ for (int i = 0; i < pointCount; ++i)
poly.append(points[i]);
QPainterPath path;
@@ -383,6 +384,7 @@ QAlphaPaintEnginePrivate::QAlphaPaintEnginePrivate()
m_pic(0),
m_picengine(0),
m_picpainter(0),
+ m_numberOfCachedRects(0),
m_hasalpha(false),
m_alphaPen(false),
m_alphaBrush(false),
@@ -433,7 +435,14 @@ void QAlphaPaintEnginePrivate::addAlphaRect(const QRectF &rect)
bool QAlphaPaintEnginePrivate::canSeeTroughBackground(bool somethingInRectHasAlpha, const QRectF &rect) const
{
- return somethingInRectHasAlpha && m_dirtyrgn.intersects(rect.toAlignedRect());
+ if (somethingInRectHasAlpha) {
+ if (m_dirtyRects.count() != m_numberOfCachedRects) {
+ m_cachedDirtyRgn.setRects(m_dirtyRects.constData(), m_dirtyRects.count());
+ m_numberOfCachedRects = m_dirtyRects.count();
+ }
+ return m_cachedDirtyRgn.intersects(rect.toAlignedRect());
+ }
+ return false;
}
void QAlphaPaintEnginePrivate::drawAlphaImage(const QRectF &rect)