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/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;

View file

@ -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("<stop offset='%1' stop-color='%2'/>")
.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);

View file

@ -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<TextWithEntities> about;
bool light = false;
bool optimizeMinistars = true;
std::optional<QGradientStops> gradientStops;
};
class TopBar final : public TopBarAbstract {