From ef5a9eb777930b7b7575eab3153f0b756e0930ea Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 10 Jun 2025 03:02:47 +0300 Subject: [PATCH] Added some utils to convenient insert of credits icons to text labels. --- .../dialogs/dialogs_top_bar_suggestion.cpp | 18 ++++-------------- .../info/profile/info_profile_actions.cpp | 2 +- .../ui/effects/credits_graphics.cpp | 16 ++++++++++++++++ .../SourceFiles/ui/effects/credits_graphics.h | 7 ++++++- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp b/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp index 400a1f5db0..943b78bd92 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp @@ -204,32 +204,22 @@ rpl::producer*> TopBarSuggestionValue( repeat(repeat); }); - const auto fontH = content->contentTitleSt().font->height; - auto customEmojiFactory = [=]( - QStringView data, - const Ui::Text::MarkedContext &context - ) -> std::unique_ptr { - return Ui::MakeCreditsIconEmoji(fontH, 1); - }; - using namespace Ui::Text; - auto context = MarkedContext{ - .customEmojiFactory = std::move(customEmojiFactory), - }; - content->setContent( tr::lng_dialogs_suggestions_credits_sub_low_title( tr::now, lt_count, float64(needed - whole), lt_emoji, - Ui::Text::SingleCustomEmoji(Ui::kCreditsCurrency), + Ui::MakeCreditsIconEntity(), lt_channels, { peers }, Ui::Text::Bold), tr::lng_dialogs_suggestions_credits_sub_low_about( tr::now, TextWithEntities::Simple), - std::move(context)); + Ui::MakeCreditsIconContext( + content->contentTitleSt().font->height, + 1)); state->desiredWrapToggle.force_assign( Toggle{ true, anim::type::normal }); }; diff --git a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp index a4ec485ee5..9ad819c339 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp @@ -2966,7 +2966,7 @@ object_ptr SetupChannelMembersAndManage( std::move(currencyValue) ) | rpl::map([](CreditsAmount credits, CreditsAmount currency) { auto creditsText = (credits > CreditsAmount(0)) - ? Ui::Text::SingleCustomEmoji(Ui::kCreditsCurrency) + ? Ui::MakeCreditsIconEntity() .append(QChar(' ')) .append(Info::ChannelEarn::MajorPart(credits)) .append(Info::ChannelEarn::MinorPart(credits)) diff --git a/Telegram/SourceFiles/ui/effects/credits_graphics.cpp b/Telegram/SourceFiles/ui/effects/credits_graphics.cpp index a3dcc9f066..e0baac5cc5 100644 --- a/Telegram/SourceFiles/ui/effects/credits_graphics.cpp +++ b/Telegram/SourceFiles/ui/effects/credits_graphics.cpp @@ -26,7 +26,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/empty_userpic.h" #include "ui/painter.h" #include "ui/rect.h" +#include "ui/text/format_values.h" #include "ui/text/text_custom_emoji.h" +#include "ui/text/text_utilities.h" #include "ui/widgets/fields/number_input.h" #include "ui/wrap/padding_wrap.h" #include "ui/wrap/vertical_layout.h" @@ -691,4 +693,18 @@ std::unique_ptr MakeCreditsIconEmoji( u"credits_icon:%1:%2"_q.arg(height).arg(count)); } +Ui::Text::MarkedContext MakeCreditsIconContext(int height, int count) { + auto customEmojiFactory = [=]( + QStringView data, + const Ui::Text::MarkedContext &context + ) -> std::unique_ptr { + return MakeCreditsIconEmoji(height, count); + }; + return { .customEmojiFactory = std::move(customEmojiFactory) }; +} + +TextWithEntities MakeCreditsIconEntity() { + return Ui::Text::SingleCustomEmoji(Ui::kCreditsCurrency); +} + } // namespace Ui diff --git a/Telegram/SourceFiles/ui/effects/credits_graphics.h b/Telegram/SourceFiles/ui/effects/credits_graphics.h index 5df03f4af2..08496856d1 100644 --- a/Telegram/SourceFiles/ui/effects/credits_graphics.h +++ b/Telegram/SourceFiles/ui/effects/credits_graphics.h @@ -21,6 +21,7 @@ class Session; namespace Ui::Text { class CustomEmoji; +struct MarkedContext; } // namespace Ui::Text namespace Ui { @@ -86,8 +87,12 @@ Fn PaintOutlinedColoredCreditsIconCallback( [[nodiscard]] QImage CreditsWhiteDoubledIcon(int size, float64 outlineRatio); -std::unique_ptr MakeCreditsIconEmoji( +[[nodiscard]] std::unique_ptr MakeCreditsIconEmoji( int height, int count); +[[nodiscard]] Ui::Text::MarkedContext MakeCreditsIconContext( + int height, + int count); +[[nodiscard]] TextWithEntities MakeCreditsIconEntity(); } // namespace Ui