summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamuel Rødal <sroedal@trolltech.com>2009-10-13 12:44:54 (GMT)
committerSamuel Rødal <sroedal@trolltech.com>2009-10-14 11:45:59 (GMT)
commit997dbe14d8bd4f370a7c972b594b5bc12e80f027 (patch)
tree9fd09072daf22bfd1fba2b5e66775fef04772b94 /src
parentb0557f0d11b247284e2b5e879b34f9d28a99e3e4 (diff)
downloadQt-997dbe14d8bd4f370a7c972b594b5bc12e80f027.zip
Qt-997dbe14d8bd4f370a7c972b594b5bc12e80f027.tar.gz
Qt-997dbe14d8bd4f370a7c972b594b5bc12e80f027.tar.bz2
Fixed wrong use of graphics effects for pixmap graphics items.
The blur, drop shadow, and bloom graphics effects are scale dependent, since they have radius and offset (in the case of drop shadow) parameters that are specified in device coordinates. Thus, we can't apply the effect in logical coordinates and scale up, and need to always use the device coordinate path for these effects. The opacity and grayscale effects still use the logical coordinate optimization. Reviewed-by: Gunnar Sletta
Diffstat (limited to 'src')
-rw-r--r--src/gui/effects/qgraphicseffect.cpp34
1 files changed, 7 insertions, 27 deletions
diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp
index ee01fdc..01df46d 100644
--- a/src/gui/effects/qgraphicseffect.cpp
+++ b/src/gui/effects/qgraphicseffect.cpp
@@ -893,15 +893,8 @@ void QGraphicsBlurEffect::draw(QPainter *painter, QGraphicsEffectSource *source)
return;
}
- QPoint offset;
- if (source->isPixmap()) {
- // No point in drawing in device coordinates (pixmap will be scaled anyways).
- const QPixmap pixmap = source->pixmap(Qt::LogicalCoordinates, &offset);
- d->filter->draw(painter, offset, pixmap);
- return;
- }
-
// Draw pixmap in device coordinates to avoid pixmap scaling.
+ QPoint offset;
const QPixmap pixmap = source->pixmap(Qt::DeviceCoordinates, &offset);
QTransform restoreTransform = painter->worldTransform();
painter->setWorldTransform(QTransform());
@@ -1084,15 +1077,8 @@ void QGraphicsDropShadowEffect::draw(QPainter *painter, QGraphicsEffectSource *s
return;
}
- QPoint offset;
- if (source->isPixmap()) {
- // No point in drawing in device coordinates (pixmap will be scaled anyways).
- const QPixmap pixmap = source->pixmap(Qt::LogicalCoordinates, &offset);
- d->filter->draw(painter, offset, pixmap);
- return;
- }
-
// Draw pixmap in device coordinates to avoid pixmap scaling.
+ QPoint offset;
const QPixmap pixmap = source->pixmap(Qt::DeviceCoordinates, &offset);
QTransform restoreTransform = painter->worldTransform();
painter->setWorldTransform(QTransform());
@@ -1486,10 +1472,8 @@ void QGraphicsBloomEffect::draw(QPainter *painter, QGraphicsEffectSource *source
return;
}
- const Qt::CoordinateSystem system = source->isPixmap()
- ? Qt::LogicalCoordinates : Qt::DeviceCoordinates;
QPoint offset;
- QPixmap pixmap = source->pixmap(system, &offset);
+ QPixmap pixmap = source->pixmap(Qt::DeviceCoordinates, &offset);
QImage result = pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
// Blur.
@@ -1514,14 +1498,10 @@ void QGraphicsBloomEffect::draw(QPainter *painter, QGraphicsEffectSource *source
compPainter.drawImage(0, 0, overlay);
compPainter.end();
- if (system == Qt::DeviceCoordinates) {
- QTransform restoreTransform = painter->worldTransform();
- painter->setWorldTransform(QTransform());
- painter->drawImage(offset, result);
- painter->setWorldTransform(restoreTransform);
- } else {
- painter->drawImage(offset, result);
- }
+ QTransform restoreTransform = painter->worldTransform();
+ painter->setWorldTransform(QTransform());
+ painter->drawImage(offset, result);
+ painter->setWorldTransform(restoreTransform);
}
QT_END_NAMESPACE