From 53d97b4146dc0031cd2f67eabc28feb561ce01e0 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 16 May 2024 21:28:13 +0300 Subject: [PATCH] Added ability to provide custom gradient to colored premium stars. --- .../ui/effects/premium_stars_colored.cpp | 13 ++++++++----- .../SourceFiles/ui/effects/premium_stars_colored.h | 4 ++-- Telegram/SourceFiles/ui/effects/premium_top_bar.cpp | 6 ++++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp b/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp index 18c9c9c24..d5987a5e7 100644 --- a/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_stars_colored.cpp @@ -35,11 +35,14 @@ void ColoredMiniStars::setSize(const QSize &size) { _mask.fill(Qt::transparent); { auto p = QPainter(&_mask); - if (_colorOverride) { - p.fillRect(0, 0, size.width(), size.height(), *_colorOverride); + if (_stopsOverride && _stopsOverride->size() == 1) { + const auto &color = _stopsOverride->front().second; + p.fillRect(0, 0, size.width(), size.height(), color); } else { auto gradient = QLinearGradient(0, 0, size.width(), 0); - gradient.setStops(Ui::Premium::GiftGradientStops()); + gradient.setStops((_stopsOverride && _stopsOverride->size() > 1) + ? (*_stopsOverride) + : Ui::Premium::GiftGradientStops()); p.setPen(Qt::NoPen); p.setBrush(gradient); p.drawRect(0, 0, size.width(), size.height()); @@ -63,8 +66,8 @@ void ColoredMiniStars::setPosition(QPoint position) { _position = std::move(position); } -void ColoredMiniStars::setColorOverride(std::optional color) { - _colorOverride = color; +void ColoredMiniStars::setColorOverride(std::optional stops) { + _stopsOverride = stops; } void ColoredMiniStars::paint(QPainter &p) { diff --git a/Telegram/SourceFiles/ui/effects/premium_stars_colored.h b/Telegram/SourceFiles/ui/effects/premium_stars_colored.h index 75660ab99..73001ada0 100644 --- a/Telegram/SourceFiles/ui/effects/premium_stars_colored.h +++ b/Telegram/SourceFiles/ui/effects/premium_stars_colored.h @@ -21,7 +21,7 @@ public: void setSize(const QSize &size); void setPosition(QPoint position); - void setColorOverride(std::optional color); + void setColorOverride(std::optional stops); void setCenter(const QRect &rect); void paint(QPainter &p); @@ -34,7 +34,7 @@ private: QImage _mask; QSize _size; QPoint _position; - std::optional _colorOverride; + std::optional _stopsOverride; }; diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp index c5f12ad6f..aaba431ca 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp @@ -202,10 +202,12 @@ TopBar::TopBar( if (_logo == u"dollar"_q) { _dollar = ScaleTo(QImage(u":/gui/art/business_logo.png"_q)); - _ministars.setColorOverride(st::premiumButtonFg->c); + _ministars.setColorOverride( + QGradientStops{{ 0, st::premiumButtonFg->c }}); } else if (!_light && !TopBarAbstract::isDark()) { _star.load(Svg()); - _ministars.setColorOverride(st::premiumButtonFg->c); + _ministars.setColorOverride( + QGradientStops{{ 0, st::premiumButtonFg->c }}); } else { _star.load(ColorizedSvg()); _ministars.setColorOverride(std::nullopt);