Added ability to provide custom gradient to star in premium top bar.

This commit is contained in:
23rd 2024-05-16 21:34:07 +03:00 committed by John Preston
parent 53d97b4146
commit 4a0bffe618
3 changed files with 12 additions and 7 deletions

View file

@ -30,6 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/application.h" #include "core/application.h"
#include "core/core_settings.h" #include "core/core_settings.h"
#include "ui/chat/chat_style.h" #include "ui/chat/chat_style.h"
#include "ui/effects/premium_graphics.h"
#include "ui/effects/premium_top_bar.h" #include "ui/effects/premium_top_bar.h"
#include "ui/text/format_values.h" #include "ui/text/format_values.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
@ -79,7 +80,8 @@ using Privacy = Api::UserPrivacy;
image.fill(Qt::transparent); image.fill(Qt::transparent);
{ {
auto p = QPainter(&image); auto p = QPainter(&image);
auto star = QSvgRenderer(Ui::Premium::ColorizedSvg()); auto star = QSvgRenderer(
Ui::Premium::ColorizedSvg(Ui::Premium::ButtonGradientStops()));
star.render(&p, Rect(size)); star.render(&p, Rect(size));
} }
return image; return image;

View file

@ -46,15 +46,15 @@ QString Svg() {
return u":/gui/icons/settings/star.svg"_q; return u":/gui/icons/settings/star.svg"_q;
} }
QByteArray ColorizedSvg() { QByteArray ColorizedSvg(const QGradientStops &gradientStops) {
auto f = QFile(Svg()); auto f = QFile(Svg());
if (!f.open(QIODevice::ReadOnly)) { if (!f.open(QIODevice::ReadOnly)) {
return QByteArray(); return QByteArray();
} }
auto content = QString::fromUtf8(f.readAll()); auto content = QString::fromUtf8(f.readAll());
auto stops = [] { auto stops = [&] {
auto s = QString(); auto s = QString();
for (const auto &stop : Ui::Premium::ButtonGradientStops()) { for (const auto &stop : gradientStops) {
s += QString("<stop offset='%1' stop-color='%2'/>") s += QString("<stop offset='%1' stop-color='%2'/>")
.arg(QString::number(stop.first), stop.second.name()); .arg(QString::number(stop.first), stop.second.name());
} }
@ -209,8 +209,10 @@ TopBar::TopBar(
_ministars.setColorOverride( _ministars.setColorOverride(
QGradientStops{{ 0, st::premiumButtonFg->c }}); QGradientStops{{ 0, st::premiumButtonFg->c }});
} else { } else {
_star.load(ColorizedSvg()); _star.load(ColorizedSvg(descriptor.gradientStops
_ministars.setColorOverride(std::nullopt); ? (*descriptor.gradientStops)
: Ui::Premium::ButtonGradientStops()));
_ministars.setColorOverride(descriptor.gradientStops);
} }
auto event = QResizeEvent(size(), size()); auto event = QResizeEvent(size(), size());
resizeEvent(&event); resizeEvent(&event);

View file

@ -26,7 +26,7 @@ class FlatLabel;
namespace Ui::Premium { namespace Ui::Premium {
[[nodiscard]] QString Svg(); [[nodiscard]] QString Svg();
[[nodiscard]] QByteArray ColorizedSvg(); [[nodiscard]] QByteArray ColorizedSvg(const QGradientStops &gradientStops);
[[nodiscard]] QImage GenerateStarForLightTopBar(QRectF rect); [[nodiscard]] QImage GenerateStarForLightTopBar(QRectF rect);
class TopBarAbstract : public RpWidget { class TopBarAbstract : public RpWidget {
@ -71,6 +71,7 @@ struct TopBarDescriptor {
rpl::producer<TextWithEntities> about; rpl::producer<TextWithEntities> about;
bool light = false; bool light = false;
bool optimizeMinistars = true; bool optimizeMinistars = true;
std::optional<QGradientStops> gradientStops;
}; };
class TopBar final : public TopBarAbstract { class TopBar final : public TopBarAbstract {