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); _mask.fill(Qt::transparent);
{ {
auto p = QPainter(&_mask); auto p = QPainter(&_mask);
if (_colorOverride) { if (_stopsOverride && _stopsOverride->size() == 1) {
p.fillRect(0, 0, size.width(), size.height(), *_colorOverride); const auto &color = _stopsOverride->front().second;
p.fillRect(0, 0, size.width(), size.height(), color);
} else { } else {
auto gradient = QLinearGradient(0, 0, size.width(), 0); 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.setPen(Qt::NoPen);
p.setBrush(gradient); p.setBrush(gradient);
p.drawRect(0, 0, size.width(), size.height()); p.drawRect(0, 0, size.width(), size.height());
@ -63,8 +66,8 @@ void ColoredMiniStars::setPosition(QPoint position) {
_position = std::move(position); _position = std::move(position);
} }
void ColoredMiniStars::setColorOverride(std::optional<QColor> color) { void ColoredMiniStars::setColorOverride(std::optional<QGradientStops> stops) {
_colorOverride = color; _stopsOverride = stops;
} }
void ColoredMiniStars::paint(QPainter &p) { void ColoredMiniStars::paint(QPainter &p) {

View file

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

View file

@ -202,10 +202,12 @@ TopBar::TopBar(
if (_logo == u"dollar"_q) { if (_logo == u"dollar"_q) {
_dollar = ScaleTo(QImage(u":/gui/art/business_logo.png"_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()) { } else if (!_light && !TopBarAbstract::isDark()) {
_star.load(Svg()); _star.load(Svg());
_ministars.setColorOverride(st::premiumButtonFg->c); _ministars.setColorOverride(
QGradientStops{{ 0, st::premiumButtonFg->c }});
} else { } else {
_star.load(ColorizedSvg()); _star.load(ColorizedSvg());
_ministars.setColorOverride(std::nullopt); _ministars.setColorOverride(std::nullopt);