From 4a0bffe61832a4731454f9fdbf24e6550964f6d8 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 16 May 2024 21:34:07 +0300 Subject: [PATCH] Added ability to provide custom gradient to star in premium top bar. --- .../settings/settings_privacy_security.cpp | 4 +++- Telegram/SourceFiles/ui/effects/premium_top_bar.cpp | 12 +++++++----- Telegram/SourceFiles/ui/effects/premium_top_bar.h | 3 ++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/settings/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/settings_privacy_security.cpp index 66a26632b..ab8f32217 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_security.cpp @@ -30,6 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/application.h" #include "core/core_settings.h" #include "ui/chat/chat_style.h" +#include "ui/effects/premium_graphics.h" #include "ui/effects/premium_top_bar.h" #include "ui/text/format_values.h" #include "ui/text/text_utilities.h" @@ -79,7 +80,8 @@ using Privacy = Api::UserPrivacy; image.fill(Qt::transparent); { auto p = QPainter(&image); - auto star = QSvgRenderer(Ui::Premium::ColorizedSvg()); + auto star = QSvgRenderer( + Ui::Premium::ColorizedSvg(Ui::Premium::ButtonGradientStops())); star.render(&p, Rect(size)); } return image; diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp index aaba431ca..fd3d11950 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.cpp @@ -46,15 +46,15 @@ QString Svg() { return u":/gui/icons/settings/star.svg"_q; } -QByteArray ColorizedSvg() { +QByteArray ColorizedSvg(const QGradientStops &gradientStops) { auto f = QFile(Svg()); if (!f.open(QIODevice::ReadOnly)) { return QByteArray(); } auto content = QString::fromUtf8(f.readAll()); - auto stops = [] { + auto stops = [&] { auto s = QString(); - for (const auto &stop : Ui::Premium::ButtonGradientStops()) { + for (const auto &stop : gradientStops) { s += QString("") .arg(QString::number(stop.first), stop.second.name()); } @@ -209,8 +209,10 @@ TopBar::TopBar( _ministars.setColorOverride( QGradientStops{{ 0, st::premiumButtonFg->c }}); } else { - _star.load(ColorizedSvg()); - _ministars.setColorOverride(std::nullopt); + _star.load(ColorizedSvg(descriptor.gradientStops + ? (*descriptor.gradientStops) + : Ui::Premium::ButtonGradientStops())); + _ministars.setColorOverride(descriptor.gradientStops); } auto event = QResizeEvent(size(), size()); resizeEvent(&event); diff --git a/Telegram/SourceFiles/ui/effects/premium_top_bar.h b/Telegram/SourceFiles/ui/effects/premium_top_bar.h index 13e8a38c7..86c8158ff 100644 --- a/Telegram/SourceFiles/ui/effects/premium_top_bar.h +++ b/Telegram/SourceFiles/ui/effects/premium_top_bar.h @@ -26,7 +26,7 @@ class FlatLabel; namespace Ui::Premium { [[nodiscard]] QString Svg(); -[[nodiscard]] QByteArray ColorizedSvg(); +[[nodiscard]] QByteArray ColorizedSvg(const QGradientStops &gradientStops); [[nodiscard]] QImage GenerateStarForLightTopBar(QRectF rect); class TopBarAbstract : public RpWidget { @@ -71,6 +71,7 @@ struct TopBarDescriptor { rpl::producer about; bool light = false; bool optimizeMinistars = true; + std::optional gradientStops; }; class TopBar final : public TopBarAbstract {