summaryrefslogtreecommitdiffstats
path: root/src/gui/effects/qgraphicseffect.cpp
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-11-03 10:16:33 (GMT)
committeraxis <qt-info@nokia.com>2009-11-03 10:16:33 (GMT)
commit51f258fb39e5bac9d3a2757afd8661e63c3d2680 (patch)
treed5788c8e530476443b5218d6ae5f94e1e064d40e /src/gui/effects/qgraphicseffect.cpp
parent1ef5dddf91c666664911686ca77cb6c1b2cde828 (diff)
parent9fab0ede200960f0dbec1457757a6ba3214c3ce6 (diff)
downloadQt-51f258fb39e5bac9d3a2757afd8661e63c3d2680.zip
Qt-51f258fb39e5bac9d3a2757afd8661e63c3d2680.tar.gz
Qt-51f258fb39e5bac9d3a2757afd8661e63c3d2680.tar.bz2
Merge branch '4.6' of git@scm.dev.nokia.troll.no:qt/qt into 4.6-s60
Diffstat (limited to 'src/gui/effects/qgraphicseffect.cpp')
-rw-r--r--src/gui/effects/qgraphicseffect.cpp72
1 files changed, 21 insertions, 51 deletions
diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp
index 3a6bab5..3815b60 100644
--- a/src/gui/effects/qgraphicseffect.cpp
+++ b/src/gui/effects/qgraphicseffect.cpp
@@ -1042,66 +1042,36 @@ void QGraphicsOpacityEffect::draw(QPainter *painter, QGraphicsEffectSource *sour
return;
}
- painter->save();
- painter->setOpacity(d->opacity);
QPoint offset;
- if (source->isPixmap()) {
- // No point in drawing in device coordinates (pixmap will be scaled anyways).
- if (!d->hasOpacityMask) {
- const QPixmap pixmap = source->pixmap(Qt::LogicalCoordinates, &offset,
- QGraphicsEffectSource::NoExpandPadMode);
- painter->drawPixmap(offset, pixmap);
- } else {
- QRect srcBrect = source->boundingRect().toAlignedRect();
- offset = srcBrect.topLeft();
- QPixmap pixmap(srcBrect.size());
- pixmap.fill(Qt::transparent);
-
- QPainter pixmapPainter(&pixmap);
- pixmapPainter.setRenderHints(painter->renderHints());
- pixmapPainter.translate(-offset);
- source->draw(&pixmapPainter);
- pixmapPainter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
- pixmapPainter.fillRect(srcBrect, d->opacityMask);
- pixmapPainter.end();
-
- painter->drawPixmap(offset, pixmap);
- }
- } else {
- // Draw pixmap in device coordinates to avoid pixmap scaling;
- if (!d->hasOpacityMask) {
- const QPixmap pixmap = source->pixmap(Qt::DeviceCoordinates, &offset,
- QGraphicsEffectSource::NoExpandPadMode);
- painter->setWorldTransform(QTransform());
- painter->drawPixmap(offset, pixmap);
- } else {
- QTransform worldTransform = painter->worldTransform();
-
- // Calculate source bounding rect in logical and device coordinates.
- QRectF srcBrect = source->boundingRect();
- QRect srcDeviceBrect = worldTransform.mapRect(srcBrect).toAlignedRect();
- srcDeviceBrect &= source->deviceRect();
+ Qt::CoordinateSystem system = source->isPixmap() ? Qt::LogicalCoordinates : Qt::DeviceCoordinates;
+ QPixmap pixmap = source->pixmap(system, &offset, QGraphicsEffectSource::NoExpandPadMode);
+ if (pixmap.isNull())
+ return;
- offset = srcDeviceBrect.topLeft();
- worldTransform *= QTransform::fromTranslate(-srcDeviceBrect.x(), -srcDeviceBrect.y());
- QPixmap pixmap(srcDeviceBrect.size());
- pixmap.fill(Qt::transparent);
+ painter->save();
+ painter->setOpacity(d->opacity);
- QPainter pixmapPainter(&pixmap);
- pixmapPainter.setRenderHints(painter->renderHints());
+ if (d->hasOpacityMask) {
+ QPainter pixmapPainter(&pixmap);
+ pixmapPainter.setRenderHints(painter->renderHints());
+ pixmapPainter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
+ if (system == Qt::DeviceCoordinates) {
+ QTransform worldTransform = painter->worldTransform();
+ worldTransform *= QTransform::fromTranslate(-offset.x(), -offset.y());
pixmapPainter.setWorldTransform(worldTransform);
- source->draw(&pixmapPainter);
- pixmapPainter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
- pixmapPainter.fillRect(srcBrect, d->opacityMask);
- pixmapPainter.end();
-
- painter->setWorldTransform(QTransform());
- painter->drawPixmap(offset, pixmap);
+ pixmapPainter.fillRect(source->boundingRect(), d->opacityMask);
+ } else {
+ pixmapPainter.translate(-offset);
+ pixmapPainter.fillRect(pixmap.rect(), d->opacityMask);
}
}
+ if (system == Qt::DeviceCoordinates)
+ painter->setWorldTransform(QTransform());
+
+ painter->drawPixmap(offset, pixmap);
painter->restore();
}