From 18850ebd83e9a3c4de9b40c3d2b8f0c76617a1c4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 20 Jan 2025 16:56:57 +0400 Subject: [PATCH] Gradient on premium gift discount badge. --- .../peer_gifts/info_peer_gifts_common.cpp | 35 ++++++++++++++----- .../info/peer_gifts/info_peer_gifts_common.h | 2 +- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.cpp b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.cpp index 54c7cc007..14a07a667 100644 --- a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.cpp +++ b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.cpp @@ -50,7 +50,11 @@ std::strong_ordering operator<=>(const GiftBadge &a, const GiftBadge &b) { if (result3 != std::strong_ordering::equal) { return result3; } - return a.fg.rgb() <=> b.fg.rgb(); + const auto result4 = (a.fg.rgb() <=> b.fg.rgb()); + if (result4 != std::strong_ordering::equal) { + return result4; + } + return a.gradient <=> b.gradient; } GiftButton::GiftButton( @@ -381,8 +385,10 @@ void GiftButton::paintEvent(QPaintEvent *e) { const auto kMinus = QChar(0x2212); return GiftBadge{ .text = kMinus + QString::number(data.discountPercent) + '%', - .bg1 = st::attentionButtonFg->c, + .bg1 = st::premiumButtonBg3->c, + .bg2 = st::premiumButtonBg2->c, .fg = st::windowBg->c, + .gradient = true, .small = true, }; } @@ -686,18 +692,31 @@ QImage ValidateRotatedBadge(const GiftBadge &badge, int added) { auto p = QPainter(&result); auto hq = PainterHighQualityEnabler(p); p.setPen(Qt::NoPen); - p.setBrush(badge.bg1); p.save(); p.translate(textpos); p.rotate(45.); const auto rect = QRect(-5 * twidth, 0, twidth * 12, font->height); - p.drawRect(rect); - if (badge.bg2.alpha() > 0) { - p.setOpacity(0.5); - p.setBrush(badge.bg2); + if (badge.gradient) { + const auto skip = font->height / M_SQRT2; + auto gradient = QLinearGradient( + QPointF(-twidth - skip, 0), + QPointF(twidth + skip, 0)); + gradient.setStops({ + { 0., badge.bg1 }, + { 1., badge.bg2 }, + }); + p.setBrush(gradient); p.drawRect(rect); - p.setOpacity(1.); + } else { + p.setBrush(badge.bg1); + p.drawRect(rect); + if (badge.bg2.alpha() > 0) { + p.setOpacity(0.5); + p.setBrush(badge.bg2); + p.drawRect(rect); + p.setOpacity(1.); + } } p.restore(); diff --git a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.h b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.h index faab730ef..bba226aaa 100644 --- a/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.h +++ b/Telegram/SourceFiles/info/peer_gifts/info_peer_gifts_common.h @@ -77,6 +77,7 @@ struct GiftBadge { QColor bg1; QColor bg2 = QColor(0, 0, 0, 0); QColor fg; + bool gradient = false; bool small = false; explicit operator bool() const { @@ -119,7 +120,6 @@ public: GiftButton(QWidget *parent, not_null delegate); ~GiftButton(); - using Mode = GiftButtonMode; void setDescriptor(const GiftDescriptor &descriptor, Mode mode); void setGeometry(QRect inner, QMargins extend);