From 8686905ee40eb8dbe171024e04e41a32069c8add Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 6 Apr 2021 13:58:23 +0400 Subject: [PATCH] Add custom brush support in RoundButton. --- ui/widgets/buttons.cpp | 13 +++++++++++-- ui/widgets/buttons.h | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ui/widgets/buttons.cpp b/ui/widgets/buttons.cpp index 2760a79..206ec73 100644 --- a/ui/widgets/buttons.cpp +++ b/ui/widgets/buttons.cpp @@ -296,6 +296,11 @@ void RoundButton::setWidthChangedCallback(Fn callback) { _numbers->setWidthChangedCallback(std::move(callback)); } +void RoundButton::setBrushOverride(std::optional brush) { + _brushOverride = std::move(brush); + update(); +} + void RoundButton::finishNumbersAnimation() { if (_numbers) { _numbers->finishAnimating(); @@ -367,8 +372,12 @@ void RoundButton::paintEvent(QPaintEvent *e) { const auto radius = rounded.height() / 2; PainterHighQualityEnabler hq(p); p.setPen(Qt::NoPen); - p.setBrush(rect.color()); + p.setBrush(_brushOverride ? *_brushOverride : rect.color()->b); p.drawRoundedRect(fill, radius, radius); + } else if (_brushOverride) { + p.setPen(Qt::NoPen); + p.setBrush(*_brushOverride); + p.drawRoundedRect(fill, st::buttonRadius, st::buttonRadius); } else { rect.paint(p, fill); } @@ -377,7 +386,7 @@ void RoundButton::paintEvent(QPaintEvent *e) { auto over = isOver(); auto down = isDown(); - if (over || down) { + if (!_brushOverride && (over || down)) { drawRect(_roundRectOver); } diff --git a/ui/widgets/buttons.h b/ui/widgets/buttons.h index 9b1e3f8..239f6a7 100644 --- a/ui/widgets/buttons.h +++ b/ui/widgets/buttons.h @@ -130,6 +130,7 @@ public: setNumbersText(QString::number(numbers), numbers); } void setWidthChangedCallback(Fn callback); + void setBrushOverride(std::optional brush); void finishNumbersAnimation(); int contentWidth() const; @@ -165,6 +166,7 @@ private: int _fullWidthOverride = 0; const style::RoundButton &_st; + std::optional _brushOverride; RoundRect _roundRect; RoundRect _roundRectOver;