X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/38c34eeca315c7be58e65d4d3fb72aaf7b866719..58c48052c38e5bb4f6cf8047dc71e40cfbf04403:/src/panels/information/pixmapviewer.cpp diff --git a/src/panels/information/pixmapviewer.cpp b/src/panels/information/pixmapviewer.cpp index 7eca876c8..2767c87ea 100644 --- a/src/panels/information/pixmapviewer.cpp +++ b/src/panels/information/pixmapviewer.cpp @@ -43,11 +43,6 @@ void PixmapViewer::setPixmap(const QPixmap &pixmap) return; } - // Avoid flicker with static pixmap if an animated image is running - if (m_animatedImage && m_animatedImage->state() == QMovie::Running) { - return; - } - if ((m_transition != NoTransition) && (m_animation.state() == QTimeLine::Running)) { m_pendingPixmaps.enqueue(pixmap); if (m_pendingPixmaps.count() > 5) { @@ -59,6 +54,12 @@ void PixmapViewer::setPixmap(const QPixmap &pixmap) m_oldPixmap = m_pixmap.isNull() ? pixmap : m_pixmap; m_pixmap = pixmap; + + // Avoid flicker with static pixmap if an animated image is running + if (m_animatedImage && m_animatedImage->state() == QMovie::Running) { + return; + } + update(); const bool animateTransition = (m_transition != NoTransition) && (m_pixmap.size() != m_oldPixmap.size()); @@ -68,7 +69,6 @@ void PixmapViewer::setPixmap(const QPixmap &pixmap) // If there is no transition animation but an animatedImage // and it is not already running, start animating now if (m_animatedImage->state() != QMovie::Running) { - m_animatedImage->setScaledSize(m_pixmap.size()); m_animatedImage->start(); } } @@ -97,7 +97,6 @@ void PixmapViewer::setAnimatedImageFileName(const QString &fileName) } if (m_animatedImage->fileName() != fileName) { - m_animatedImage->stop(); m_animatedImage->setFileName(fileName); } @@ -126,7 +125,8 @@ void PixmapViewer::paintEvent(QPaintEvent *event) const bool useOldPixmap = (m_transition == SizeTransition) && (m_oldPixmap.width() > m_pixmap.width()); const QPixmap &largePixmap = useOldPixmap ? m_oldPixmap : m_pixmap; if (!largePixmap.isNull()) { - const QPixmap scaledPixmap = largePixmap.scaled(scaledWidth, scaledHeight, Qt::IgnoreAspectRatio, Qt::FastTransformation); + QPixmap scaledPixmap = largePixmap.scaled(scaledWidth, scaledHeight, Qt::IgnoreAspectRatio, Qt::FastTransformation); + scaledPixmap.setDevicePixelRatio(devicePixelRatioF()); style()->drawItemPixmap(&painter, rect(), Qt::AlignCenter, scaledPixmap); } @@ -144,7 +144,6 @@ void PixmapViewer::checkPendingPixmaps() update(); m_animation.start(); } else if (m_hasAnimatedImage) { - m_animatedImage->setScaledSize(m_pixmap.size()); m_animatedImage->start(); } else { m_oldPixmap = m_pixmap; @@ -164,6 +163,8 @@ void PixmapViewer::stopAnimatedImage() if (m_hasAnimatedImage) { m_animatedImage->stop(); m_hasAnimatedImage = false; + delete m_animatedImage; + m_animatedImage = nullptr; } } @@ -174,3 +175,5 @@ bool PixmapViewer::isAnimatedMimeType(const QString &mimeType) return QMovie::supportedFormats().contains(format); }); } + +#include "moc_pixmapviewer.cpp"