From 6ca777102c15b63f2a1d1680d93ef394d377386e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 7 Nov 2023 20:06:52 +0300 Subject: [PATCH] Added ability to paint non-optimized ministars to fix possible glitches. --- Telegram/SourceFiles/boxes/gift_premium_box.cpp | 2 +- .../info/boosts/create_giveaway_box.cpp | 3 ++- Telegram/SourceFiles/settings/settings_premium.cpp | 2 +- .../ui/effects/premium_stars_colored.cpp | 14 ++++++++++---- .../SourceFiles/ui/effects/premium_stars_colored.h | 3 ++- .../SourceFiles/ui/effects/premium_top_bar.cpp | 5 +++-- Telegram/SourceFiles/ui/effects/premium_top_bar.h | 3 ++- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Telegram/SourceFiles/boxes/gift_premium_box.cpp b/Telegram/SourceFiles/boxes/gift_premium_box.cpp index e7f2dab7b3..96196bc119 100644 --- a/Telegram/SourceFiles/boxes/gift_premium_box.cpp +++ b/Telegram/SourceFiles/boxes/gift_premium_box.cpp @@ -95,7 +95,7 @@ void GiftBox( + st::defaultUserpicButton.size.height())); using ColoredMiniStars = Ui::Premium::ColoredMiniStars; - const auto stars = box->lifetime().make_state(top); + const auto stars = box->lifetime().make_state(top, true); const auto userpic = Ui::CreateChild( top, diff --git a/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp b/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp index 915e74e7c2..f34e3f7dad 100644 --- a/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp +++ b/Telegram/SourceFiles/info/boosts/create_giveaway_box.cpp @@ -171,7 +171,8 @@ void AddPremiumTopBarWithDefaultTitleBar( nullptr, tr::lng_giveaway_new_title(), tr::lng_giveaway_new_about(Ui::Text::RichLangValue), - true); + true, + false); bar->setAttribute(Qt::WA_TransparentForMouseEvents); box->addRow( diff --git a/Telegram/SourceFiles/settings/settings_premium.cpp b/Telegram/SourceFiles/settings/settings_premium.cpp index cb3eeccd89..b18e735f7b 100644 --- a/Telegram/SourceFiles/settings/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/settings_premium.cpp @@ -523,7 +523,7 @@ TopBarUser::TopBarUser( , _content(this) , _title(_content, st::settingsPremiumUserTitle) , _about(_content, st::userPremiumCover.about) -, _ministars(_content) +, _ministars(_content, true) , _smallTop({ .widget = object_ptr(this), .text = Ui::Text::String( diff --git a/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp b/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp index 5eeee3b892..18c9c9c24f 100644 --- a/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp @@ -13,10 +13,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Ui { namespace Premium { -ColoredMiniStars::ColoredMiniStars(not_null parent) -: _ministars([=](const QRect &r) { - parent->update(r.translated(_position)); -}, true) { +ColoredMiniStars::ColoredMiniStars( + not_null parent, + bool optimizeUpdate) +: _ministars( + optimizeUpdate + ? Fn([=](const QRect &r) { + parent->update(r.translated(_position)); + }) + : Fn([=](const QRect &) { parent->update(); }), + true) { } void ColoredMiniStars::setSize(const QSize &size) { diff --git a/Telegram/SourceFiles/ui/effects/premium_stars_colored.h b/Telegram/SourceFiles/ui/effects/premium_stars_colored.h index a8bdbd9746..75660ab992 100644 --- a/Telegram/SourceFiles/ui/effects/premium_stars_colored.h +++ b/Telegram/SourceFiles/ui/effects/premium_stars_colored.h @@ -16,7 +16,8 @@ namespace Premium { class ColoredMiniStars final { public: - ColoredMiniStars(not_null parent); + // optimizeUpdate may cause paint glitch. + ColoredMiniStars(not_null parent, bool optimizeUpdate); void setSize(const QSize &size); void setPosition(QPoint position); diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp index 2127d996c4..4094b584d2 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp @@ -155,13 +155,14 @@ TopBar::TopBar( Fn clickContextOther, rpl::producer title, rpl::producer about, - bool light) + bool light, + bool optimizeMinistars) : TopBarAbstract(parent, st) , _light(light) , _titleFont(st.titleFont) , _titlePadding(st.titlePadding) , _about(this, std::move(about), st.about) -, _ministars(this) { +, _ministars(this, optimizeMinistars) { std::move( title ) | rpl::start_with_next([=](QString text) { diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.h b/Telegram/SourceFiles/ui/effects/premium_top_bar.h index c0749df00a..9ccc4fa30a 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.h +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.h @@ -72,7 +72,8 @@ public: Fn clickContextOther, rpl::producer title, rpl::producer about, - bool light = false); + bool light = false, + bool optimizeMinistars = true); ~TopBar(); void setPaused(bool paused) override;