From 69b24c494ebdc3cfc3457936a53003056395a1fa Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 1 Nov 2023 13:55:00 +0300 Subject: [PATCH] Added multiplier badge to boosts list in boosts info. --- .../Resources/icons/boosts/boost_mini2.png | Bin 0 -> 324 bytes .../Resources/icons/boosts/boost_mini2@2x.png | Bin 0 -> 521 bytes .../Resources/icons/boosts/boost_mini2@3x.png | Bin 0 -> 692 bytes .../info_statistics_list_controllers.cpp | 96 +++++++++++++++++- .../SourceFiles/statistics/statistics.style | 6 ++ 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 Telegram/Resources/icons/boosts/boost_mini2.png create mode 100644 Telegram/Resources/icons/boosts/boost_mini2@2x.png create mode 100644 Telegram/Resources/icons/boosts/boost_mini2@3x.png diff --git a/Telegram/Resources/icons/boosts/boost_mini2.png b/Telegram/Resources/icons/boosts/boost_mini2.png new file mode 100644 index 0000000000000000000000000000000000000000..b4884ccc8219eeafd8f74d49f69a2f80234439f3 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$e)_J-(hG>W; zCrDU1#KrB~woUBvUY{9G4uXk^4`r>(I5;^IPbFPEaPs8N%Fk)MyuH%qc?nq#;)!W# z_jVLMt~c1QeY^YgV^7Y{GUZ+*#KGcZ*zbEgZO1vd)|4)=RrR3boFyt=akR{0I#rWq5uE@ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/boosts/boost_mini2@2x.png b/Telegram/Resources/icons/boosts/boost_mini2@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb6e01e999deabdc3a38546147dca9f8ff2bdb0 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={W7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TWzSVF5FO4N|zKE$K7JY)==*5D(tB zQw&!(1&AE~yq8Pymei893l#!*#24z$VzPH+<*n_IIpTlmmAZh-9}&lH3$raIrWQ+P zzW>m4`sr2cSD9b=iuOGJ|6lg~&hNJ}t}K3cV7cs%WsE+T_uS2U{&{Aae!8jw`hCIGtexwu z=lWGz9f_RQxyWLsPfBFpB95|u{R^(FR^aG+ykXyd-UqvQ+Yblr2p7!BnYAo`XHL=H zxcySA&mOQ!IFn|~mfDyac{QS=YGZ`KJL4Pgzjy2_%G!SWBkO}JX0y+p5;=0<{kMk& z4V$|=G*>?U_#=k#kIJvVcC3vRx89abQVDoawO6aFNuyIUG_;Y=^x0=i!N%JUHaIt) tO=~{=;^xPSJyC04{JRxd{$MlT9|naVzczhHx@!fB22WQ%mvv4FO#t!t-Y5V7 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/boosts/boost_mini2@3x.png b/Telegram/Resources/icons/boosts/boost_mini2@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..16aff7dbe80ce241eca2519a90f0cff05ea59631 GIT binary patch literal 692 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1SD@H_cU-pZ zz5o9H+p_i7Pe1;6LN96C#ivENX3`6G-p#ApJ1;bDaqH)~H;doQlw*O>ygwZsqE(+N+nQtW&ge4wsD6>7t!~9GRz2 z^l*_~kYo0{#x77{_0?5O0VYy=$l&v zv(KvC{Bhj9r(&L!Oy9wT4^Phu@UY#@`~I{@u;AggdFRtTOSl%DOqu1kd{Q}=x}98q zg^k}r^Q?uJUsmmvTW9EJFV}B3pTBhRf+d$TW5Vau?Y}?yq)K4^+CO*GHt!74IvA;Q zGR5d&LBt*x@t-yOZsshq(pDAgez=KoZ`9gNSv{Xy844WUmPv;n4ahfiox-frV2()iGLl7t>*5tFLC*IWOne%E7k%% zG65a28e$<@Q_B}PEp)gT(;2$_vS4G@)>%T_yG%d-jA39h`f+Y~w%;4JWVU~7j2T8V zC3@W+RlQ>UFqzBb^wUdu+k?%+GdS*F@mn68XsG{~6B2(nIsY*4?^DgX8?jFmlwv$x L{an^LB{Ts55AGPK literal 0 HcmV?d00001 diff --git a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp index 89aadcf66..b7f2168c6 100644 --- a/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp +++ b/Telegram/SourceFiles/info/statistics/info_statistics_list_controllers.cpp @@ -321,6 +321,99 @@ void PublicForwardsController::appendRow( return; } +class BoostRow final : public PeerListRow { +public: + using PeerListRow::PeerListRow; + + void setMultiplier(int multiplier); + + int paintNameIconGetWidth( + Painter &p, + Fn repaint, + crl::time now, + int nameLeft, + int nameTop, + int nameWidth, + int availableWidth, + int outerWidth, + bool selected) override; + +private: + QImage _badge; + +}; + +void BoostRow::setMultiplier(int multiplier) { + if (!multiplier) { + _badge = QImage(); + return; + } + auto badgeText = Ui::Text::String( + st::statisticsDetailsBottomCaptionStyle, + QString::number(multiplier)); + const auto badgeTextWidth = badgeText.maxWidth(); + const auto badgex = 0; + const auto badgey = 0; + const auto badgeh = 0 + st::boostsListBadgeHeight; + const auto badgew = badgeTextWidth + + rect::m::sum::h(st::boostsListBadgeTextPadding); + auto result = QImage( + QSize(badgew, badgeh) * style::DevicePixelRatio(), + QImage::Format_ARGB32_Premultiplied); + result.fill(Qt::transparent); + result.setDevicePixelRatio(style::DevicePixelRatio()); + { + auto p = Painter(&result); + + p.setPen(Qt::NoPen); + p.setBrush(st::premiumButtonBg2); + + const auto r = QRect(badgex, badgey, badgew, badgeh); + { + auto hq = PainterHighQualityEnabler(p); + p.drawRoundedRect(r, badgeh / 2, badgeh / 2); + } + + p.setPen(st::premiumButtonFg); + p.setBrush(Qt::NoBrush); + badgeText.drawLeftElided( + p, + r.x() + st::boostsListBadgeTextPadding.left(), + badgey + st::boostsListBadgeTextPadding.top(), + badgew, + badgew * 2); + + st::boostsListMiniIcon.paint( + p, + QPoint(r.x() + st::boostsListMiniIconSkip, r.y()), + badgew * 2); + } + _badge = std::move(result); +} + +int BoostRow::paintNameIconGetWidth( + Painter &p, + Fn repaint, + crl::time now, + int nameLeft, + int nameTop, + int nameWidth, + int availableWidth, + int outerWidth, + bool selected) { + if (_badge.isNull()) { + return 0; + } + const auto badgew = _badge.width() / style::DevicePixelRatio(); + const auto nameTooLarge = (nameWidth > availableWidth); + const auto &padding = st::boostsListBadgePadding; + const auto left = nameTooLarge + ? ((nameLeft + availableWidth) - badgew - padding.left()) + : (nameLeft + nameWidth + padding.right()); + p.drawImage(left, nameTop + padding.top(), _badge); + return badgew + (nameTooLarge ? padding.left() : 0); +} + class BoostsController final : public PeerListController { public: explicit BoostsController(BoostsDescriptor d); @@ -393,7 +486,8 @@ void BoostsController::applySlice(const Data::BoostsListSlice &slice) { if (delegate()->peerListFindRow(user->id.value)) { continue; } - auto row = std::make_unique(user); + auto row = std::make_unique(user); + row->setMultiplier(item.multiplier); row->setCustomStatus(tr::lng_boosts_list_status( tr::now, lt_date, diff --git a/Telegram/SourceFiles/statistics/statistics.style b/Telegram/SourceFiles/statistics/statistics.style index c631a4f30..e0966bce4 100644 --- a/Telegram/SourceFiles/statistics/statistics.style +++ b/Telegram/SourceFiles/statistics/statistics.style @@ -148,3 +148,9 @@ getBoostsButton: SettingsButton(reportReasonButton) { textFgOver: lightButtonFg; } getBoostsButtonIcon: icon {{ "menu/gift_premium", lightButtonFg }}; + +boostsListMiniIcon: icon{{ "boosts/boost_mini2", premiumButtonFg }}; +boostsListMiniIconSkip: 1px; +boostsListBadgeTextPadding: margins(16px, 1px, 6px, 0px); +boostsListBadgePadding: margins(4px, 1px, 4px, 0px); +boostsListBadgeHeight: 16px;