diff options
author | Bea Lam <bea.lam@nokia.com> | 2009-11-11 02:27:29 (GMT) |
---|---|---|
committer | Bea Lam <bea.lam@nokia.com> | 2009-11-11 02:27:29 (GMT) |
commit | 22fe9474b01c577337e43416666a8f90d0ad6064 (patch) | |
tree | f55624c92fc63db9e9fbba43c07ce5f9df59a25b /src/declarative/graphicsitems/qmlgraphicspainteditem.cpp | |
parent | b8b5ad641a5977651e61b5e572918f90248d8851 (diff) | |
parent | b6b0b5d7f211e10beb76711fcecdf068af34fdfd (diff) | |
download | Qt-22fe9474b01c577337e43416666a8f90d0ad6064.zip Qt-22fe9474b01c577337e43416666a8f90d0ad6064.tar.gz Qt-22fe9474b01c577337e43416666a8f90d0ad6064.tar.bz2 |
Merge branch 'kinetic-declarativeui' of scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'src/declarative/graphicsitems/qmlgraphicspainteditem.cpp')
-rw-r--r-- | src/declarative/graphicsitems/qmlgraphicspainteditem.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicspainteditem.cpp b/src/declarative/graphicsitems/qmlgraphicspainteditem.cpp index 2c849c8..b1b1210 100644 --- a/src/declarative/graphicsitems/qmlgraphicspainteditem.cpp +++ b/src/declarative/graphicsitems/qmlgraphicspainteditem.cpp @@ -49,6 +49,7 @@ #include <QApplication> #include <QGraphicsSceneMouseEvent> #include <QPainter> +#include <QPaintEngine> QT_BEGIN_NAMESPACE @@ -209,9 +210,24 @@ void QmlGraphicsPaintedItem::paint(QPainter *p, const QStyleOptionGraphicsItem * ++inpaint; - const QRect clip = p->clipRegion().boundingRect(); + const QTransform &x = p->deviceTransform(); + QTransform xinv = x.inverted(); + QRegion effectiveClip; + QRegion sysClip = p->paintEngine()->systemClip(); + if (xinv.type() <= QTransform::TxScale && sysClip.numRects() < 5) { + // simple transform, region gets no more complicated... + effectiveClip = xinv.map(sysClip); + } else { + // do not make complicated regions... + effectiveClip = xinv.mapRect(sysClip.boundingRect()); + } + + QRegion topaint = p->clipRegion(); + if (topaint.isEmpty()) + topaint = effectiveClip; + else + topaint &= effectiveClip; - QRegion topaint(clip); topaint &= content; QRegion uncached(content); p->setRenderHints(QPainter::SmoothPixmapTransform, d->smooth); |