From e241d607aba775d1ed0c8ff537ac69b9bacb18ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Fri, 31 Jul 2009 07:11:49 +0200 Subject: Fixes QGraphicsEffect offset bugs. --- src/gui/graphicsview/qgraphicseffect.cpp | 5 ++--- src/gui/graphicsview/qgraphicsitem.cpp | 2 +- src/gui/image/qpixmapfilter.cpp | 4 +++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gui/graphicsview/qgraphicseffect.cpp b/src/gui/graphicsview/qgraphicseffect.cpp index 9196ee0..37e3d8c 100644 --- a/src/gui/graphicsview/qgraphicseffect.cpp +++ b/src/gui/graphicsview/qgraphicseffect.cpp @@ -543,7 +543,6 @@ void QGraphicsBloomEffect::draw(QPainter *painter, QGraphicsEffectSource *source QPoint offset; const int radius = d->blurRadius; - const int delta = radius * 3; if (source->isPixmap()) { // No point in drawing in device coordinates (pixmap will be scaled anyways). @@ -555,7 +554,7 @@ void QGraphicsBloomEffect::draw(QPainter *painter, QGraphicsEffectSource *source overlay = brightened(overlay, 70); img = composited(img, overlay, d->opacity, QPainter::CompositionMode_Overlay); - painter->drawImage(offset - QPoint(delta, delta), img); + painter->drawImage(offset, img); return; } @@ -571,7 +570,7 @@ void QGraphicsBloomEffect::draw(QPainter *painter, QGraphicsEffectSource *source // Draw using an untransformed painter. QTransform restoreTransform = painter->worldTransform(); painter->setWorldTransform(QTransform()); - painter->drawImage(offset - QPoint(radius * 3, radius * 3), img); + painter->drawImage(offset, img); painter->setWorldTransform(restoreTransform); } diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 9700965..991f2b2 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -10054,7 +10054,7 @@ QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QP const QRectF sourceRect = boundingRect(system); QRect effectRect = item->graphicsEffect()->boundingRectFor(sourceRect).toAlignedRect(); if (offset) - *offset = sourceRect.toAlignedRect().topLeft(); + *offset = effectRect.topLeft(); if (deviceCoordinates) { // Clip to viewport rect. diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index b7b3733..579d057 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -586,7 +586,9 @@ Qt::TransformationMode QPixmapBlurFilter::quality() const */ QRectF QPixmapBlurFilter::boundingRectFor(const QRectF &rect) const { - return rect; + Q_D(const QPixmapBlurFilter); + const qreal delta = d->radius * 2; + return rect.adjusted(-delta, -delta, delta, delta); } // Blur the image according to the blur radius -- cgit v0.12