From f34835463d4ddf1a32e6636402f8292b963061bf Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 13 Apr 2025 18:53:37 +0300 Subject: [PATCH] Added initial ability to create credit icon as non-session custom emoji. --- .../ui/effects/credits_graphics.cpp | 56 +++++++++++++++++++ .../SourceFiles/ui/effects/credits_graphics.h | 8 +++ 2 files changed, 64 insertions(+) diff --git a/Telegram/SourceFiles/ui/effects/credits_graphics.cpp b/Telegram/SourceFiles/ui/effects/credits_graphics.cpp index 0fbf095cce..64f21566e3 100644 --- a/Telegram/SourceFiles/ui/effects/credits_graphics.cpp +++ b/Telegram/SourceFiles/ui/effects/credits_graphics.cpp @@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/empty_userpic.h" #include "ui/painter.h" #include "ui/rect.h" +#include "ui/text/text_custom_emoji.h" #include "ui/widgets/fields/number_input.h" #include "ui/wrap/padding_wrap.h" #include "ui/wrap/vertical_layout.h" @@ -42,6 +43,55 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Ui { namespace { +class CreditsIconEmoji final : public Ui::Text::CustomEmoji { +public: + CreditsIconEmoji(int height, int count); + + int width() override; + QString entityData() override; + + void paint(QPainter &p, const Context &context) override; + void unload() override; + bool ready() override; + bool readyInDefaultState() override; + +private: + const int _height; + const int _count; + QImage _image; + +}; + +CreditsIconEmoji::CreditsIconEmoji(int height, int count) +: _height(height) +, _count(count) +, _image(GenerateStars(height, count)) { +} + +int CreditsIconEmoji::width() { + return _image.width() / style::DevicePixelRatio(); +} + +QString CreditsIconEmoji::entityData() { + return u"credits_icon:%1:%2"_q.arg(_height).arg(_count); +} + +void CreditsIconEmoji::paint(QPainter &p, const Context &context) { + p.drawImage(context.position, _image); +} + +void CreditsIconEmoji::unload() { + _image = QImage(); +} + +bool CreditsIconEmoji::ready() { + return true; +} + +bool CreditsIconEmoji::readyInDefaultState() { + return true; +} + PaintRoundImageCallback MultiThumbnail( PaintRoundImageCallback first, PaintRoundImageCallback second, @@ -678,4 +728,10 @@ QImage CreditsWhiteDoubledIcon(int size, float64 outlineRatio) { return result; } +std::unique_ptr MakeCreditsIconEmoji( + int height, + int count) { + return std::make_unique(height, count); +} + } // namespace Ui diff --git a/Telegram/SourceFiles/ui/effects/credits_graphics.h b/Telegram/SourceFiles/ui/effects/credits_graphics.h index a304a9ff5f..022c7cac80 100644 --- a/Telegram/SourceFiles/ui/effects/credits_graphics.h +++ b/Telegram/SourceFiles/ui/effects/credits_graphics.h @@ -19,6 +19,10 @@ namespace Main { class Session; } // namespace Main +namespace Ui::Text { +class CustomEmoji; +} // namespace Ui::Text + namespace Ui { class MaskedInputField; @@ -82,4 +86,8 @@ Fn PaintOutlinedColoredCreditsIconCallback( [[nodiscard]] QImage CreditsWhiteDoubledIcon(int size, float64 outlineRatio); +std::unique_ptr MakeCreditsIconEmoji( + int height, + int count); + } // namespace Ui