summaryrefslogtreecommitdiffstats
path: root/src/widgets/effects/qpixmapfilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/effects/qpixmapfilter.cpp')
-rw-r--r--src/widgets/effects/qpixmapfilter.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/widgets/effects/qpixmapfilter.cpp b/src/widgets/effects/qpixmapfilter.cpp
index 637c9c6aba..1f899c2660 100644
--- a/src/widgets/effects/qpixmapfilter.cpp
+++ b/src/widgets/effects/qpixmapfilter.cpp
@@ -1135,8 +1135,12 @@ void QPixmapColorizeFilter::draw(QPainter *painter, const QPointF &dest, const Q
destImage = std::move(buffer);
}
- if (srcImage.hasAlphaChannel())
- destImage.setAlphaChannel(srcImage.alphaChannel());
+ if (srcImage.hasAlphaChannel()) {
+ Q_ASSERT(destImage.format() == QImage::Format_ARGB32_Premultiplied);
+ QPainter maskPainter(&destImage);
+ maskPainter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
+ maskPainter.drawImage(0, 0, srcImage);
+ }
painter->drawImage(dest, destImage);
}