From 2a3d72ad2eb884498e488c8dd061e936bf32e9d3 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 6 Jul 2022 18:14:32 +0300 Subject: [PATCH] Added ability to provide custom text to subscribe button. --- .../SourceFiles/boxes/premium_preview_box.cpp | 6 ++- .../SourceFiles/settings/settings_premium.cpp | 37 +++++++++++-------- .../SourceFiles/settings/settings_premium.h | 12 ++++-- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/Telegram/SourceFiles/boxes/premium_preview_box.cpp b/Telegram/SourceFiles/boxes/premium_preview_box.cpp index 1f817f2c9..b2f02b720 100644 --- a/Telegram/SourceFiles/boxes/premium_preview_box.cpp +++ b/Telegram/SourceFiles/boxes/premium_preview_box.cpp @@ -1482,7 +1482,11 @@ void PreviewBox( }) | rpl::flatten_latest(); auto button = descriptor.fromSettings ? object_ptr::fromRaw( - Settings::CreateSubscribeButton(controller, box, computeRef)) + Settings::CreateSubscribeButton({ + controller, + box, + computeRef, + })) : CreateUnlockButton(box, std::move(unlock)); button->resizeToWidth(width); if (!descriptor.fromSettings) { diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index 44d8734be..1e7d68f80 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -787,10 +787,11 @@ void Premium::setupContent() { box->closeBox(); }); } else { - const auto button = CreateSubscribeButton( + const auto button = CreateSubscribeButton({ controller, box, - [] { return u"double_limits"_q; }); + [] { return u"double_limits"_q; } + }); box->boxClosing( ) | rpl::start_with_next(hidden, box->lifetime()); @@ -986,8 +987,10 @@ QPointer Premium::createPinnedToBottom( not_null parent) { const auto content = Ui::CreateChild(parent.get()); - _subscribe = CreateSubscribeButton(_controller, content, [=] { - return _ref; + _subscribe = CreateSubscribeButton({ + _controller, + content, + [=] { return _ref; } }); _showFinished.events( @@ -1089,22 +1092,24 @@ QString LookupPremiumRef(PremiumPreview section) { } not_null CreateSubscribeButton( - not_null controller, - not_null parent, - Fn computeRef) { + SubscribeButtonArgs &&args) { const auto result = Ui::CreateChild( - parent.get(), - Ui::Premium::ButtonGradientStops()); + args.parent.get(), + args.gradientStops + ? base::take(*args.gradientStops) + : Ui::Premium::ButtonGradientStops()); - result->setClickedCallback([=] { + result->setClickedCallback([ + controller = args.controller, + computeRef = args.computeRef] { SendScreenAccept(controller); StartPremiumPayment(controller, computeRef()); }); const auto &st = st::premiumPreviewBox.button; - result->resize(parent->width(), st.height); + result->resize(args.parent->width(), st.height); - const auto premium = &controller->session().api().premium(); + const auto premium = &args.controller->session().api().premium(); premium->reload(); const auto computeCost = [=] { const auto amount = premium->monthlyAmount(); @@ -1117,9 +1122,11 @@ not_null CreateSubscribeButton( const auto label = Ui::CreateChild( result, - tr::lng_premium_summary_button( - lt_cost, - premium->statusTextValue() | rpl::map(computeCost)), + args.text + ? base::take(*args.text) + : tr::lng_premium_summary_button( + lt_cost, + premium->statusTextValue() | rpl::map(computeCost)), st::premiumPreviewButtonLabel); label->setAttribute(Qt::WA_TransparentForMouseEvents); rpl::combine( diff --git a/Telegram/SourceFiles/settings/settings_premium.h b/Telegram/SourceFiles/settings/settings_premium.h index 2737b02f8..69ba0a8fe 100644 --- a/Telegram/SourceFiles/settings/settings_premium.h +++ b/Telegram/SourceFiles/settings/settings_premium.h @@ -39,10 +39,16 @@ void StartPremiumPayment( [[nodiscard]] QString LookupPremiumRef(PremiumPreview section); +struct SubscribeButtonArgs final { + not_null controller; + not_null parent; + Fn computeRef; + std::optional> text; + std::optional gradientStops; +}; + [[nodiscard]] not_null CreateSubscribeButton( - not_null controller, - not_null parent, - Fn computeRef); + SubscribeButtonArgs &&args); } // namespace Settings