From f2f85a9083fca2e04503c3b6d912112f04b9e9d0 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 9 Aug 2024 23:20:33 +0300 Subject: [PATCH] Replaced icon with custom emoji in list of credits history entries. --- .../info/bot/earn/info_bot_earn_list.cpp | 6 -- .../earn/info_channel_earn_list.cpp | 4 -- .../info_statistics_list_controllers.cpp | 64 +++++++++---------- .../info_statistics_list_controllers.h | 1 - .../SourceFiles/settings/settings_credits.cpp | 4 -- 5 files changed, 30 insertions(+), 49 deletions(-) diff --git a/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp b/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp index aac6f38ee..69e87689f 100644 --- a/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp +++ b/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp @@ -361,16 +361,12 @@ void InnerWidget::fillHistory() { e)); }; - const auto star = lifetime().make_state( - Ui::GenerateStars(st::creditsTopupButton.height, 1)); - Info::Statistics::AddCreditsHistoryList( controller->uiShow(), fullSlice, fullWrap->entity(), entryClicked, peer, - star, true, true); Info::Statistics::AddCreditsHistoryList( @@ -379,7 +375,6 @@ void InnerWidget::fillHistory() { inWrap->entity(), entryClicked, peer, - star, true, false); Info::Statistics::AddCreditsHistoryList( @@ -388,7 +383,6 @@ void InnerWidget::fillHistory() { outWrap->entity(), std::move(entryClicked), peer, - star, false, true); diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp index 707a045cd..e5ddc05e1 100644 --- a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp +++ b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp @@ -1412,16 +1412,12 @@ void InnerWidget::fill() { e)); }; - const auto star = tabCreditsList->lifetime().make_state( - Ui::GenerateStars(st::creditsTopupButton.height, 1)); - Info::Statistics::AddCreditsHistoryList( show, data.creditsStatusSlice, tabCreditsList->entity(), entryClicked, _peer, - star, true, true); } diff --git a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp index 82de1464b..ea2e53468 100644 --- a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp +++ b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp @@ -135,7 +135,6 @@ struct CreditsDescriptor final { Data::CreditsStatusSlice firstSlice; Fn entryClickedCallback; not_null peer; - not_null creditIcon; bool in = false; bool out = false; }; @@ -724,7 +723,7 @@ public: struct Descriptor final { Data::CreditsHistoryEntry entry; Data::SubscriptionEntry subscription; - not_null creditIcon; + Core::MarkedTextContext context; int rowHeight = 0; Fn)> updateCallback; }; @@ -755,7 +754,7 @@ private: const Data::CreditsHistoryEntry _entry; const Data::SubscriptionEntry _subscription; - not_null const _creditIcon; + const Core::MarkedTextContext _context; const int _rowHeight; PaintRoundImageCallback _paintUserpicCallback; @@ -773,7 +772,7 @@ CreditsRow::CreditsRow( : PeerListRow(peer, UniqueRowIdFromEntry(descriptor.entry)) , _entry(descriptor.entry) , _subscription(descriptor.subscription) -, _creditIcon(descriptor.creditIcon) +, _context(descriptor.context) , _rowHeight(descriptor.rowHeight) { const auto callback = Ui::PaintPreviewCallback( &peer->session(), @@ -790,7 +789,7 @@ CreditsRow::CreditsRow(const Descriptor &descriptor) : PeerListRow(UniqueRowIdFromEntry(descriptor.entry)) , _entry(descriptor.entry) , _subscription(descriptor.subscription) -, _creditIcon(descriptor.creditIcon) +, _context(descriptor.context) , _rowHeight(descriptor.rowHeight) { init(); } @@ -831,23 +830,27 @@ void CreditsRow::init() { lt_date, langDayOfMonthFull(_subscription.until.date()))); } + auto &manager = _context.session->data().customEmojiManager(); if (_entry) { constexpr auto kMinus = QChar(0x2212); - _rightText.setText( + _rightText.setMarkedText( st::semiboldTextStyle, - (_entry.in ? QChar('+') : kMinus) - + Lang::FormatCountDecimal(std::abs(int64(_entry.credits)))); + TextWithEntities() + .append(_entry.in ? QChar('+') : kMinus) + .append( + Lang::FormatCountDecimal(std::abs(int64(_entry.credits)))) + .append(QChar(' ')) + .append(manager.creditsEmoji()), + kMarkupTextOptions, + _context); } else if (_subscription.subscription.credits && !isSpecial) { const auto peer = PeerListRow::peer(); _rightText.setMarkedText( st::semiboldTextStyle, - peer->owner().customEmojiManager().creditsEmoji().append( + manager.creditsEmoji().append( Lang::FormatCountDecimal(_subscription.subscription.credits)), kMarkupTextOptions, - Core::MarkedTextContext{ - .session = &peer->session(), - .customEmojiRepaint = [] {}, - }); + _context); } if (!_paintUserpicCallback) { _paintUserpicCallback = !isSpecial @@ -880,19 +883,14 @@ QSize CreditsRow::rightActionSize() const { return QSize( st::contactsStatusFont->width(text) + st::boxRowPadding.right(), _rowHeight); - } else if (_subscription) { + } else if (_subscription || _entry) { return QSize( _rightText.maxWidth() + st::boxRowPadding.right(), _rowHeight); } else if (!_entry && !_subscription) { return QSize(); } - return QSize( - _rightText.maxWidth() - + (_creditIcon->width() / style::DevicePixelRatio()) - + st::creditsHistoryRightSkip - + _rightText.style()->font->spacew * 2, - _rowHeight); + return QSize(); } QMargins CreditsRow::rightActionMargins() const { @@ -911,12 +909,12 @@ void CreditsRow::rightActionPaint( bool selected, bool actionSelected) { const auto &font = _rightText.style()->font; + const auto rightSkip = st::boxRowPadding.right(); if (_subscription) { const auto &statusFont = st::contactsStatusFont; const auto &st = st::boostsListBox.item; const auto textHeight = font->height + statusFont->height; const auto skip = (_rowHeight - textHeight) / 2; - const auto rightSkip = st::boxRowPadding.right(); if (_subscription.cancelled || _subscription.expired) { y += _rowHeight / 2; p.setFont(statusFont); @@ -955,17 +953,13 @@ void CreditsRow::rightActionPaint( : _entry.in ? st::boxTextFgGood : st::menuIconAttentionColor); - x += st::creditsHistoryRightSkip; _rightText.draw(p, Ui::Text::PaintContext{ - .position = QPoint(x, y - font->height / 2), + .position = QPoint( + outerWidth - _rightText.maxWidth() - rightSkip, + y - font->height / 2), .outerWidth = outerWidth, .availableWidth = outerWidth, }); - x += _rightText.maxWidth() + font->spacew * 2; - p.drawImage( - x, - y -(_creditIcon->height() / style::DevicePixelRatio()) / 2, - *_creditIcon); } class CreditsController final : public PeerListController { @@ -987,11 +981,11 @@ private: const not_null _session; Fn _entryClickedCallback; - not_null const _creditIcon; Api::CreditsHistory _api; Data::CreditsStatusSlice _firstSlice; Data::CreditsStatusSlice::OffsetToken _apiToken; + Core::MarkedTextContext _context; rpl::variable _allLoaded = false; bool _requesting = false; @@ -1001,9 +995,12 @@ private: CreditsController::CreditsController(CreditsDescriptor d) : _session(&d.peer->session()) , _entryClickedCallback(std::move(d.entryClickedCallback)) -, _creditIcon(d.creditIcon) , _api(d.peer, d.in, d.out) -, _firstSlice(std::move(d.firstSlice)) { +, _firstSlice(std::move(d.firstSlice)) +, _context(Core::MarkedTextContext{ + .session = _session, + .customEmojiRepaint = [] {}, +}) { PeerListController::setStyleOverrides(&st::boostsListBox); } @@ -1045,7 +1042,7 @@ void CreditsController::applySlice(const Data::CreditsStatusSlice &slice) { const auto descriptor = CreditsRow::Descriptor{ .entry = i, .subscription = s, - .creditIcon = _creditIcon, + .context = _context, .rowHeight = computeListSt().item.height, .updateCallback = [=](not_null row) { delegate()->peerListUpdateRow(row); @@ -1235,7 +1232,6 @@ void AddCreditsHistoryList( not_null container, Fn callback, not_null bot, - not_null icon, bool in, bool out) { struct State final { @@ -1249,7 +1245,7 @@ void AddCreditsHistoryList( CreditsController controller; }; const auto state = container->lifetime().make_state( - CreditsDescriptor{ firstSlice, callback, bot, icon, in, out }, + CreditsDescriptor{ firstSlice, callback, bot, in, out }, show); state->delegate.setContent(container->add( diff --git a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.h b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.h index 8423de55c..0b14a10ae 100644 --- a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.h +++ b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.h @@ -56,7 +56,6 @@ void AddCreditsHistoryList( not_null container, Fn entryClickedCallback, not_null peer, - not_null creditIcon, bool in, bool out); diff --git a/Telegram/SourceFiles/settings/settings_credits.cpp b/Telegram/SourceFiles/settings/settings_credits.cpp index ea3cc6bdb..faa2f4b39 100644 --- a/Telegram/SourceFiles/settings/settings_credits.cpp +++ b/Telegram/SourceFiles/settings/settings_credits.cpp @@ -164,7 +164,6 @@ void Credits::setupSubscriptions(not_null container) { fullWrap->entity(), entryClicked, self, - &_star, true, true); @@ -296,7 +295,6 @@ void Credits::setupHistory(not_null container) { fullWrap->entity(), entryClicked, self, - &_star, true, true); Info::Statistics::AddCreditsHistoryList( @@ -305,7 +303,6 @@ void Credits::setupHistory(not_null container) { inWrap->entity(), entryClicked, self, - &_star, true, false); Info::Statistics::AddCreditsHistoryList( @@ -314,7 +311,6 @@ void Credits::setupHistory(not_null container) { outWrap->entity(), std::move(entryClicked), self, - &_star, false, true);