From 545392f90f230e8f2fa2a9e970257e20de397140 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 25 Jan 2022 10:16:42 +0300 Subject: [PATCH] Show webm stickers in media preview. --- Telegram/SourceFiles/window/window_media_preview.cpp | 9 ++++++--- Telegram/SourceFiles/window/window_media_preview.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/window/window_media_preview.cpp b/Telegram/SourceFiles/window/window_media_preview.cpp index 4f0e31cae..bb700e01b 100644 --- a/Telegram/SourceFiles/window/window_media_preview.cpp +++ b/Telegram/SourceFiles/window/window_media_preview.cpp @@ -260,7 +260,9 @@ void MediaPreviewWidget::setupLottie() { QPixmap MediaPreviewWidget::currentImage() const { const auto blur = Images::PrepareArgs{ .options = Images::Option::Blur }; if (_document) { - if (const auto sticker = _document->sticker()) { + const auto sticker = _document->sticker(); + const auto webm = sticker && sticker->isWebm(); + if (sticker && !webm) { if (_cacheStatus != CacheLoaded) { if (sticker->isLottie() && !_lottie && _documentMedia->loaded()) { const_cast(this)->setupLottie(); @@ -288,7 +290,7 @@ QPixmap MediaPreviewWidget::currentImage() const { const auto paused = _controller->isGifPausedAtLeastFor( Window::GifPauseReason::MediaPreview); return gif->current( - { .frame = currentDimensions() }, + { .frame = currentDimensions(), .keepAlpha = webm }, paused ? 0 : crl::now()); } if (_cacheStatus != CacheThumbLoaded @@ -337,7 +339,7 @@ QPixmap MediaPreviewWidget::currentImage() const { void MediaPreviewWidget::startGifAnimation( const Media::Clip::ReaderPointer &gif) { - gif->start({ .frame = currentDimensions() }); + gif->start({ .frame = currentDimensions(), .keepAlpha = _gifWithAlpha }); } void MediaPreviewWidget::validateGifAnimation() { @@ -370,6 +372,7 @@ void MediaPreviewWidget::validateGifAnimation() { const auto callback = [=](Media::Clip::Notification notification) { clipCallback(notification); }; + _gifWithAlpha = (_documentMedia->owner()->sticker() != nullptr); if (contentLoaded) { _gif = Media::Clip::MakeReader( _documentMedia->owner()->location(), diff --git a/Telegram/SourceFiles/window/window_media_preview.h b/Telegram/SourceFiles/window/window_media_preview.h index e1480865c..d5a78f840 100644 --- a/Telegram/SourceFiles/window/window_media_preview.h +++ b/Telegram/SourceFiles/window/window_media_preview.h @@ -66,6 +66,7 @@ private: std::shared_ptr _photoMedia; std::shared_ptr _documentMedia; Media::Clip::ReaderPointer _gif, _gifThumbnail; + bool _gifWithAlpha = false; crl::time _gifLastPosition = 0; std::unique_ptr _lottie;