From bb8f8131e4b617d29dea0687d68b1dd37036208e Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 22 Jul 2022 20:37:12 +0300 Subject: [PATCH] Improve premium preview from emoji panel. --- .../SourceFiles/boxes/premium_preview_box.cpp | 16 +++++++++++++--- Telegram/SourceFiles/boxes/premium_preview_box.h | 4 +++- .../chat_helpers/emoji_list_widget.cpp | 8 ++++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index 78c985c0b..ce046718d 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -65,6 +65,7 @@ struct Descriptor { base::flat_map disabled; bool fromSettings = false; Fn hiddenCallback; + Fn)> shownCallback; }; bool operator==(const Descriptor &a, const Descriptor &b) { @@ -1516,7 +1517,11 @@ void Show( const Descriptor &descriptor, const std::shared_ptr &media, QImage back) { - controller->show(Box(PreviewBox, controller, descriptor, media, back)); + const auto box = controller->show( + Box(PreviewBox, controller, descriptor, media, back)); + if (descriptor.shownCallback) { + descriptor.shownCallback(box); + } } void Show(not_null controller, QImage back) { @@ -1539,7 +1544,10 @@ void Show( not_null controller, Descriptor &&descriptor) { if (!controller->session().premiumPossible()) { - controller->show(Box(PremiumUnavailableBox)); + const auto box = controller->show(Box(PremiumUnavailableBox)); + if (descriptor.shownCallback) { + descriptor.shownCallback(box); + } return; } auto &list = Preloads(); @@ -1616,10 +1624,12 @@ void ShowStickerPreviewBox( void ShowPremiumPreviewBox( not_null controller, PremiumPreview section, - const base::flat_map &disabled) { + const base::flat_map &disabled, + Fn)> shown) { Show(controller, Descriptor{ .section = section, .disabled = disabled, + .shownCallback = std::move(shown), }); } diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.h b/Telegram/SourceFiles/boxes/premium_preview_box.h index a40bcae99..ed057f3f9 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.h +++ b/Telegram/SourceFiles/boxes/premium_preview_box.h @@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL class DocumentData; namespace Ui { +class BoxContent; class GenericBox; class GradientButton; } // namespace Ui @@ -55,7 +56,8 @@ enum class ReactionDisableType { void ShowPremiumPreviewBox( not_null controller, PremiumPreview section, - const base::flat_map &disabled = {}); + const base::flat_map &disabled = {}, + Fn)> shown = nullptr); void ShowPremiumPreviewToBuy( not_null controller, diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp index 829e78478..7833f9ef1 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp @@ -1093,7 +1093,11 @@ void EmojiListWidget::selectCustom(not_null document) { if (document->isPremiumEmoji() && !document->session().premium()) { ShowPremiumPreviewBox( controller(), - PremiumPreview::AnimatedEmoji); + PremiumPreview::AnimatedEmoji, + {}, + crl::guard(this, [=](not_null box) { + checkHideWithBox(box.get()); + })); return; } Core::App().settings().incrementRecentEmoji({ RecentEmojiDocument{ @@ -1755,7 +1759,7 @@ void EmojiListWidget::initButton( button.back = prepare(Qt::transparent, [&]() -> QBrush { if (gradient) { auto result = QLinearGradient(QPointF(0, 0), QPointF(width, 0)); - result.setStops(Ui::Premium::ButtonGradientStops()); + result.setStops(Ui::Premium::GiftGradientStops()); return result; } return st::emojiPanButton.textBg;