From ec6744022c1a86f3bead192f9649c10dc424a98b Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 19 Mar 2020 15:04:55 +0400 Subject: [PATCH] Specify icon overrides for side bar button. --- ui/widgets/side_bar_button.cpp | 26 ++++++++++++++++++++++++-- ui/widgets/side_bar_button.h | 6 ++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/ui/widgets/side_bar_button.cpp b/ui/widgets/side_bar_button.cpp index 7d7d651..569cd9f 100644 --- a/ui/widgets/side_bar_button.cpp +++ b/ui/widgets/side_bar_button.cpp @@ -58,6 +58,14 @@ void SideBarButton::setBadge(const QString &badge, bool muted) { update(); } +void SideBarButton::setIconOverride( + const style::icon *iconOverride, + const style::icon *iconOverrideActive) { + _iconOverride = iconOverride; + _iconOverrideActive = iconOverrideActive; + update(); +} + int SideBarButton::resizeGetHeight(int newWidth) { auto result = _st.minHeight; const auto text = _text.countHeight(newWidth - _st.textSkip * 2); @@ -73,7 +81,7 @@ void SideBarButton::paintEvent(QPaintEvent *e) { RippleButton::paintRipple(p, 0, 0); - const auto &icon = _active ? _st.iconActive : _st.icon; + const auto &icon = computeIcon(); const auto x = (_st.iconPosition.x() < 0) ? (width() - icon.width()) / 2 : _st.iconPosition.x(); @@ -116,6 +124,20 @@ void SideBarButton::paintEvent(QPaintEvent *e) { } } +const style::icon &SideBarButton::computeIcon() const { + return _active + ? (_iconOverrideActive + ? *_iconOverrideActive + : !_st.iconActive.empty() + ? _st.iconActive + : _iconOverride + ? *_iconOverride + : _st.icon) + : _iconOverride + ? *_iconOverride + : _st.icon; +} + void SideBarButton::validateIconCache() { Expects(_st.iconPosition.x() < 0); Expects(_st.iconPosition.y() >= 0); @@ -123,7 +145,7 @@ void SideBarButton::validateIconCache() { if (!(_active ? _iconCacheActive : _iconCache).isNull()) { return; } - const auto &icon = _active ? _st.iconActive : _st.icon; + const auto &icon = computeIcon(); auto image = QImage( icon.size() * style::DevicePixelRatio(), QImage::Format_ARGB32_Premultiplied); diff --git a/ui/widgets/side_bar_button.h b/ui/widgets/side_bar_button.h index 6e257bf..4bacb17 100644 --- a/ui/widgets/side_bar_button.h +++ b/ui/widgets/side_bar_button.h @@ -26,15 +26,21 @@ public: void setActive(bool active); void setBadge(const QString &badge, bool muted); + void setIconOverride( + const style::icon *iconOverride, + const style::icon *iconOverrideActive = nullptr); int resizeGetHeight(int newWidth) override; private: void paintEvent(QPaintEvent *e) override; + [[nodiscard]] const style::icon &computeIcon() const; void validateIconCache(); const style::SideBarButton &_st; + const style::icon *_iconOverride = nullptr; + const style::icon *_iconOverrideActive = nullptr; Ui::Text::String _text; Ui::Text::String _badge; QImage _iconCache;