From 7a2562e5bb950917e4a65be21ee6c76f72981010 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 27 Oct 2024 13:39:24 +0300 Subject: [PATCH] Added icons to earn buttons in profile sections of owned bots. --- Telegram/SourceFiles/info/info.style | 2 + .../info/profile/info_profile_actions.cpp | 64 ++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index 1838d6f95..ae7037a2c 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -485,6 +485,8 @@ infoSharedMediaButtonIconPosition: point(20px, 3px); infoGroupMembersIconPosition: point(20px, 10px); infoChannelMembersIconPosition: point(20px, 4px); infoChannelAdminsIconPosition: point(24px, 7px); +infoEarnCreditsIconPosition: point(24px, 7px); +infoEarnCurrencyIconPosition: point(20px, 3px); infoOpenApp: RoundButton(defaultActiveButton) { textTop: 11px; diff --git a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp index 0e3a6e9c2..6ba286fe7 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_actions.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_actions.cpp @@ -790,7 +790,52 @@ rpl::producer AddCurrencyAction( tr::lng_manage_peer_bot_balance_currency(), state->balance.value() | rpl::map(rpl::mappers::_1 > 0), [=] { parentController->showSection(Info::ChannelEarn::Make(user)); }, - &st::infoIconBotBalance); + nullptr); + { + const auto button = wrapButton->entity(); + const auto icon = Ui::CreateChild(button); + icon->resize(st::infoIconReport.size()); + const auto image = [&] { + auto image = QImage( + icon->size() * style::DevicePixelRatio(), + QImage::Format_ARGB32_Premultiplied); + image.setDevicePixelRatio(style::DevicePixelRatio()); + image.fill(Qt::transparent); + auto p = QPainter(&image); + st::infoIconReport.paintInCenter( + p, + icon->rect(), + st::infoIconFg->c); + p.setCompositionMode(QPainter::CompositionMode_Clear); + const auto w = st::lineWidth * 6; + p.fillRect( + QRect( + rect::center(icon->rect()).x() - w / 2, + rect::center(icon->rect()).y() - w, + w, + w * 2), + Qt::white); + p.setCompositionMode(QPainter::CompositionMode_SourceOver); + const auto i = Ui::Earn::IconCurrencyColored( + st::inviteLinkSubscribeBoxTerms.style.font, + st::infoIconFg->c); + p.drawImage( + (icon->width() - i.width() / style::DevicePixelRatio()) / 2, + (icon->height() - i.height() / style::DevicePixelRatio()) / 2, + i); + return image; + }(); + icon->paintRequest() | rpl::start_with_next([=] { + auto p = QPainter(icon); + auto hq = PainterHighQualityEnabler(p); + p.drawImage(0, 0, image); + }, icon->lifetime()); + + button->sizeValue( + ) | rpl::start_with_next([=](const QSize &size) { + icon->move(st::infoEarnCurrencyIconPosition); + }, icon->lifetime()); + } const auto balance = user->session().credits().balanceCurrency(user->id); if (balance) { state->balance = balance; @@ -865,7 +910,22 @@ rpl::producer AddCreditsAction( tr::lng_manage_peer_bot_balance_credits(), state->balance.value() | rpl::map(rpl::mappers::_1 > 0), [=] { parentController->showSection(Info::BotEarn::Make(user)); }, - &st::infoIconBotBalance); + nullptr); + { + const auto button = wrapButton->entity(); + const auto icon = Ui::CreateChild(button); + const auto image = Ui::Earn::MenuIconCredits(); + icon->resize(image.size() / style::DevicePixelRatio()); + icon->paintRequest() | rpl::start_with_next([=] { + auto p = QPainter(icon); + p.drawImage(0, 0, image); + }, icon->lifetime()); + + button->sizeValue( + ) | rpl::start_with_next([=](const QSize &size) { + icon->move(st::infoEarnCreditsIconPosition); + }, icon->lifetime()); + } if (const auto balance = user->session().credits().balance(user->id)) { state->balance = balance; }