From 37093c9f33f32fadcb6bc8f0bdbf2dd5ee80177b Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 2 Jul 2025 10:27:41 +0300 Subject: [PATCH] Slightly improved mini stars for button in history view premium gifts. --- .../history/view/history_view_about_view.cpp | 8 +++--- .../view/media/history_view_premium_gift.cpp | 6 +++-- .../view/media/history_view_premium_gift.h | 2 +- .../view/media/history_view_service_box.cpp | 4 +-- .../view/media/history_view_service_box.h | 6 +++-- .../SourceFiles/ui/effects/premium_stars.cpp | 27 ++++++++++--------- .../SourceFiles/ui/effects/premium_stars.h | 1 + 7 files changed, 32 insertions(+), 22 deletions(-) diff --git a/Telegram/SourceFiles/history/view/history_view_about_view.cpp b/Telegram/SourceFiles/history/view/history_view_about_view.cpp index 4a0229b25e..e09fc425d5 100644 --- a/Telegram/SourceFiles/history/view/history_view_about_view.cpp +++ b/Telegram/SourceFiles/history/view/history_view_about_view.cpp @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_sending.h" #include "apiwrap.h" #include "base/random.h" +#include "ui/effects/premium_stars.h" #include "boxes/premium_preview_box.h" #include "chat_helpers/stickers_lottie.h" #include "core/click_handler_types.h" @@ -75,7 +76,7 @@ public: TextWithEntities subtitle() override; int buttonSkip() override; rpl::producer button() override; - bool buttonMinistars() override; + std::optional buttonMinistars() override; void draw( Painter &p, const PaintContext &context, @@ -432,8 +433,9 @@ rpl::producer EmptyChatLockedBox::button() { : tr::lng_send_charges_stars_go(); } -bool EmptyChatLockedBox::buttonMinistars() { - return true; +auto EmptyChatLockedBox::buttonMinistars() +-> std::optional { + return Ui::Premium::MiniStarsType::SlowStars; } TextWithEntities EmptyChatLockedBox::subtitle() { diff --git a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp index a4096487db..d3ef5e26a1 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.cpp @@ -246,8 +246,10 @@ rpl::producer PremiumGift::button() { : tr::lng_prize_open(); } -bool PremiumGift::buttonMinistars() { - return true; +std::optional PremiumGift::buttonMinistars() { + return tonGift() + ? Ui::Premium::MiniStarsType::SlowDiamondStars + : Ui::Premium::MiniStarsType::SlowStars; } ClickHandlerPtr PremiumGift::createViewLink() { diff --git a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h index 5b2c2d4bca..ef0bf67612 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h +++ b/Telegram/SourceFiles/history/view/media/history_view_premium_gift.h @@ -31,7 +31,7 @@ public: TextWithEntities title() override; TextWithEntities subtitle() override; rpl::producer button() override; - bool buttonMinistars() override; + std::optional buttonMinistars() override; QImage cornerTag(const PaintContext &context) override; int buttonSkip() override; void draw( diff --git a/Telegram/SourceFiles/history/view/media/history_view_service_box.cpp b/Telegram/SourceFiles/history/view/media/history_view_service_box.cpp index 44747c018d..5e078f7d19 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_service_box.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_service_box.cpp @@ -104,10 +104,10 @@ ServiceBox::ServiceBox( } }, _lifetime); } - if (_content->buttonMinistars()) { + if (const auto type = _content->buttonMinistars()) { _button.stars = std::make_unique( [=](const QRect &) { repaint(); }, - Ui::Premium::MiniStarsType::SlowStars); + *type); _button.lastFg = std::make_unique(); } } diff --git a/Telegram/SourceFiles/history/view/media/history_view_service_box.h b/Telegram/SourceFiles/history/view/media/history_view_service_box.h index 7aced59258..fe7018e849 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_service_box.h +++ b/Telegram/SourceFiles/history/view/media/history_view_service_box.h @@ -15,6 +15,7 @@ class RippleAnimation; namespace Ui::Premium { class ColoredMiniStars; +enum class MiniStarsType; } // namespace Ui::Premium namespace HistoryView { @@ -32,8 +33,9 @@ public: return top(); } [[nodiscard]] virtual rpl::producer button() = 0; - [[nodiscard]] virtual bool buttonMinistars() { - return false; + [[nodiscard]] virtual auto buttonMinistars() + -> std::optional { + return std::nullopt; } [[nodiscard]] virtual QImage cornerTag(const PaintContext &context) { return {}; diff --git a/Telegram/SourceFiles/ui/effects/premium_stars.cpp b/Telegram/SourceFiles/ui/effects/premium_stars.cpp index 36ef2d8c2e..f88d0dc259 100644 --- a/Telegram/SourceFiles/ui/effects/premium_stars.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_stars.cpp @@ -25,28 +25,31 @@ MiniStars::MiniStars( Fn updateCallback, bool opaque, Type type) -: _availableAngles((type != Type::SlowStars) -? std::vector{ - Interval{ -10, 40 }, - Interval{ 180 + 10 - 40, 40 }, - Interval{ 180 + 15, 50 }, - Interval{ -15 - 50, 50 }, -} -: std::vector{ Interval{ -90, 180 }, Interval{ 90, 180 } }) -, _lifeLength((type != Type::SlowStars) +: _availableAngles((type != Type::SlowStars && type != Type::SlowDiamondStars) + ? std::vector{ + Interval{ -10, 40 }, + Interval{ 180 + 10 - 40, 40 }, + Interval{ 180 + 15, 50 }, + Interval{ -15 - 50, 50 }, + } + : std::vector{ Interval{ -90, 180 }, Interval{ 90, 180 } }) +, _lifeLength((type != Type::SlowStars && type != Type::SlowDiamondStars) ? Interval{ 150 / 5, 200 / 5 } : Interval{ 150 * 2, 200 * 2 }) -, _deathTime((type != Type::SlowStars) +, _deathTime((type != Type::SlowStars && type != Type::SlowDiamondStars) ? Interval{ 1500, 2000 } : Interval{ 1500 * 2, 2000 * 2 }) , _size({ 5, 10 }) , _alpha({ opaque ? 100 : 40, opaque ? 100 : 60 }) , _sinFactor({ 10, 190 }) , _spritesCount({ 0, ((type == Type::MonoStars) ? 1 : 2) }) -, _appearProgressTill((type != Type::SlowStars) ? 0.2 : 0.01) +, _appearProgressTill((type != Type::SlowStars + && type != Type::SlowDiamondStars) + ? 0.2 + : 0.01) , _disappearProgressAfter(0.8) , _distanceProgressStart(0.5) -, _sprite((type == Type::DiamondStars) +, _sprite((type == Type::DiamondStars || type == Type::SlowDiamondStars) ? u":/gui/icons/settings/starmini.svg"_q : u":/gui/icons/settings/star.svg"_q) , _animation([=](crl::time now) { diff --git a/Telegram/SourceFiles/ui/effects/premium_stars.h b/Telegram/SourceFiles/ui/effects/premium_stars.h index aa4dcec8b1..ade27a409f 100644 --- a/Telegram/SourceFiles/ui/effects/premium_stars.h +++ b/Telegram/SourceFiles/ui/effects/premium_stars.h @@ -19,6 +19,7 @@ enum class MiniStarsType { BiStars, SlowStars, DiamondStars, + SlowDiamondStars, }; class MiniStars final {