From d6bf5513ff4bd48b1c081712527e4e03ca1e2d6f Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 30 Jan 2023 21:41:30 +0300 Subject: [PATCH] Respected option from app config in emoji preview for userpic builder. --- .../info_userpic_emoji_builder_preview.cpp | 26 +++++++++++++++++++ .../info_userpic_emoji_builder_preview.h | 7 ++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp index e5f131654..85dcb680d 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.cpp @@ -13,6 +13,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_session.h" #include "history/view/media/history_view_sticker_player.h" #include "info/userpic/info_userpic_emoji_builder_common.h" +#include "main/main_account.h" +#include "main/main_app_config.h" #include "main/main_session.h" #include "ui/rect.h" @@ -29,6 +31,10 @@ not_null PreviewPainter::document() const { return _media->owner(); } +void PreviewPainter::setPlayOnce(bool value) { + _playOnce = value; +} + void PreviewPainter::setDocument( not_null document, Fn updateCallback) { @@ -43,6 +49,13 @@ void PreviewPainter::setDocument( _media->checkStickerLarge(); _media->goodThumbnailWanted(); + if (_playOnce) { + _firstFrameShown = false; + _paused = false; + } else { + _paused = true; + } + rpl::single() | rpl::then( document->owner().session().downloaderTaskFinished() ) | rpl::start_with_next([=] { @@ -94,6 +107,14 @@ bool PreviewPainter::paintForeground(QPainter &p) { crl::now(), _paused); + if (_playOnce) { + if (!_firstFrameShown && (frame.index == 1)) { + _firstFrameShown = true; + } else if (_firstFrameShown && !frame.index) { + _paused = true; + } + } + if (frame.image.width() == frame.image.height()) { p.drawImage(_frameRect, frame.image); } else { @@ -119,7 +140,12 @@ EmojiUserpic::EmojiUserpic(not_null parent, const QSize &size) } void EmojiUserpic::setDocument(not_null document) { + if (!_playOnce.has_value()) { + const auto &c = document->owner().session().account().appConfig(); + _playOnce = !c.get(u"upload_markup_video"_q, false); + } _painter.setDocument(document, [=] { update(); }); + _painter.setPlayOnce(*_playOnce); } void EmojiUserpic::result(int size, Fn done) { diff --git a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.h b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.h index 4ceaa1dce..75680c331 100644 --- a/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.h +++ b/Telegram/SourceFiles/info/userpic/info_userpic_emoji_builder_preview.h @@ -29,6 +29,7 @@ public: [[nodiscard]] not_null document() const; + void setPlayOnce(bool value); void setDocument( not_null document, Fn updateCallback); @@ -43,7 +44,9 @@ private: std::shared_ptr _media; std::unique_ptr _player; - bool _paused = true; + bool _playOnce = false; + bool _paused = false; + bool _firstFrameShown = false; rpl::lifetime _lifetime; }; @@ -63,6 +66,8 @@ protected: private: PreviewPainter _painter; + std::optional _playOnce; + QImage _previousImage; QImage _image; std::vector _colors;