diff --git a/Telegram/SourceFiles/history/view/media/history_view_media.cpp b/Telegram/SourceFiles/history/view/media/history_view_media.cpp index f4c78ece97..f858fc7c07 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media.cpp @@ -172,7 +172,9 @@ PointState Media::pointState(QPoint point) const { : PointState::Outside; } -std::unique_ptr Media::stickerTakeLottie() { +std::unique_ptr Media::stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements) { return nullptr; } diff --git a/Telegram/SourceFiles/history/view/media/history_view_media.h b/Telegram/SourceFiles/history/view/media/history_view_media.h index 0b16b63be5..cb74586122 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media.h +++ b/Telegram/SourceFiles/history/view/media/history_view_media.h @@ -26,6 +26,7 @@ using SharedMediaTypesMask = base::enum_mask; namespace Lottie { class SinglePlayer; +struct ColorReplacements; } // namespace Lottie namespace HistoryView { @@ -145,7 +146,9 @@ public: } virtual void stickerClearLoopPlayed() { } - virtual std::unique_ptr stickerTakeLottie(); + virtual std::unique_ptr stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements); virtual void checkAnimation() { } diff --git a/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp b/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp index 62f1f5a6b6..a960d4d32e 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp @@ -26,7 +26,9 @@ constexpr auto kMaxForwardedBarLines = 4; } // namespace -auto UnwrappedMedia::Content::stickerTakeLottie() +auto UnwrappedMedia::Content::stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements) -> std::unique_ptr { return nullptr; } @@ -383,8 +385,10 @@ TextState UnwrappedMedia::textState(QPoint point, StateRequest request) const { return result; } -std::unique_ptr UnwrappedMedia::stickerTakeLottie() { - return _content->stickerTakeLottie(); +std::unique_ptr UnwrappedMedia::stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements) { + return _content->stickerTakeLottie(data, replacements); } int UnwrappedMedia::calculateFullRight(const QRect &inner) const { diff --git a/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.h b/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.h index ecda739fd1..fed5f09cab 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.h +++ b/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.h @@ -34,7 +34,9 @@ public: } virtual void stickerClearLoopPlayed() { } - virtual std::unique_ptr stickerTakeLottie(); + virtual std::unique_ptr stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements); virtual bool hasHeavyPart() const { return false; } @@ -85,7 +87,9 @@ public: void stickerClearLoopPlayed() override { _content->stickerClearLoopPlayed(); } - std::unique_ptr stickerTakeLottie() override; + std::unique_ptr stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements) override; bool hasHeavyPart() const override { return _content->hasHeavyPart(); diff --git a/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp b/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp index bf4e856e96..4bd2295abf 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_sticker.cpp @@ -71,7 +71,7 @@ Sticker::Sticker( _data->loadThumbnail(parent->data()->fullId()); } if (const auto media = replacing ? replacing->media() : nullptr) { - _lottie = media->stickerTakeLottie(); + _lottie = media->stickerTakeLottie(_data, _replacements); if (_lottie) { lottieCreated(); } @@ -341,8 +341,12 @@ void Sticker::unloadLottie() { _parent->checkHeavyPart(); } -std::unique_ptr< Lottie::SinglePlayer> Sticker::stickerTakeLottie() { - return std::move(_lottie); +std::unique_ptr Sticker::stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements) { + return (data == _data && replacements == _replacements) + ? std::move(_lottie) + : nullptr; } } // namespace HistoryView diff --git a/Telegram/SourceFiles/history/view/media/history_view_sticker.h b/Telegram/SourceFiles/history/view/media/history_view_sticker.h index 4687482678..88edbfb7cb 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_sticker.h +++ b/Telegram/SourceFiles/history/view/media/history_view_sticker.h @@ -50,7 +50,9 @@ public: void stickerClearLoopPlayed() override { _lottieOncePlayed = false; } - std::unique_ptr stickerTakeLottie() override; + std::unique_ptr stickerTakeLottie( + not_null data, + const Lottie::ColorReplacements *replacements) override; bool hasHeavyPart() const override; void unloadHeavyPart() override;