Added ability to provide custom gradient to colored premium stars.

This commit is contained in:
23rd 2024-05-16 21:28:13 +03:00 committed by John Preston
parent 2a224c839e
commit 53d97b4146
3 changed files with 14 additions and 9 deletions

View file

@ -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<QColor> color) {
_colorOverride = color;
void ColoredMiniStars::setColorOverride(std::optional<QGradientStops> stops) {
_stopsOverride = stops;
}
void ColoredMiniStars::paint(QPainter &p) {

View file

@ -21,7 +21,7 @@ public:
void setSize(const QSize &size);
void setPosition(QPoint position);
void setColorOverride(std::optional<QColor> color);
void setColorOverride(std::optional<QGradientStops> stops);
void setCenter(const QRect &rect);
void paint(QPainter &p);
@ -34,7 +34,7 @@ private:
QImage _mask;
QSize _size;
QPoint _position;
std::optional<QColor> _colorOverride;
std::optional<QGradientStops> _stopsOverride;
};

View file

@ -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);