summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-01-21 03:03:09 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-01-21 03:03:09 +0100
commitb4e0c6a2b046985caa907fe2888245962d03e79b (patch)
treec596bb33a5da0ad41c3290ac8ac18e7b173071e8
parentabfb7b84d33726fa7b5fdff29371569018afdf8f (diff)
parent3e6d52b5628178c0ee1acac562403a2de7833a53 (diff)
Merge remote-tracking branch 'origin/5.14' into 5.15
-rw-r--r--src/plugins/imageformats/webp/qwebphandler.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/plugins/imageformats/webp/qwebphandler.cpp b/src/plugins/imageformats/webp/qwebphandler.cpp
index f0b8caf..aab7aad 100644
--- a/src/plugins/imageformats/webp/qwebphandler.cpp
+++ b/src/plugins/imageformats/webp/qwebphandler.cpp
@@ -162,6 +162,7 @@ bool QWebpHandler::read(QImage *image)
if (!ensureScanned() || device()->isSequential() || !ensureDemuxer())
return false;
+ QRect prevFrameRect;
if (m_iter.frame_num == 0) {
// Read global meta-data chunks first
WebPChunkIterator metaDataIter;
@@ -177,6 +178,9 @@ bool QWebpHandler::read(QImage *image)
if (!WebPDemuxGetFrame(m_demuxer, 1, &m_iter))
return false;
} else {
+ if (m_iter.has_alpha && m_iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND)
+ prevFrameRect = currentImageRect();
+
// Go to next frame
if (!WebPDemuxNextFrame(&m_iter))
return false;
@@ -208,8 +212,16 @@ bool QWebpHandler::read(QImage *image)
} else {
// Animation
QPainter painter(m_composited);
- if (m_features.has_alpha && m_iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND)
- m_composited->fill(Qt::transparent);
+ if (!prevFrameRect.isEmpty()) {
+ painter.setCompositionMode(QPainter::CompositionMode_Clear);
+ painter.fillRect(prevFrameRect, Qt::black);
+ }
+ if (m_features.has_alpha) {
+ if (m_iter.blend_method == WEBP_MUX_NO_BLEND)
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ else
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ }
painter.drawImage(currentImageRect(), frame);
*image = *m_composited;