diff options
author | Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> | 2021-04-08 14:27:14 +0300 |
---|---|---|
committer | Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> | 2021-05-01 15:07:10 +0300 |
commit | d99ef327a885874fed1c4e35e0f47b10290c6bd9 (patch) | |
tree | 2bb07f9c8daef56dc4b00549421738de68985845 /src/qt | |
parent | c054720e08b5549913f54b9b4bc4e4002617ff23 (diff) | |
download | bitcoin-d99ef327a885874fed1c4e35e0f47b10290c6bd9.tar.xz |
qt: Add GUIUtil::ThemedLabel class
The ThemedLabel class correctly handles appearance changes on macOS.
Diffstat (limited to 'src/qt')
-rw-r--r-- | src/qt/guiutil.cpp | 31 | ||||
-rw-r--r-- | src/qt/guiutil.h | 20 |
2 files changed, 51 insertions, 0 deletions
diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index d10bf9f9ae..3c4f3df89d 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -6,6 +6,7 @@ #include <qt/bitcoinaddressvalidator.h> #include <qt/bitcoinunits.h> +#include <qt/platformstyle.h> #include <qt/qvalidatedlineedit.h> #include <qt/sendcoinsrecipient.h> @@ -61,6 +62,7 @@ #include <QUrlQuery> #include <QtGlobal> +#include <cassert> #include <chrono> #if defined(Q_OS_MAC) @@ -786,6 +788,35 @@ qreal calculateIdealFontSize(int width, const QString& text, QFont font, qreal m return font_size; } +ThemedLabel::ThemedLabel(const PlatformStyle* platform_style, QWidget* parent) + : QLabel{parent}, m_platform_style{platform_style} +{ + assert(m_platform_style); +} + +void ThemedLabel::setThemedPixmap(const QString& image_filename, int width, int height) +{ + m_image_filename = image_filename; + m_pixmap_width = width; + m_pixmap_height = height; + updateThemedPixmap(); +} + +void ThemedLabel::changeEvent(QEvent* e) +{ +#ifdef Q_OS_MACOS + if (e->type() == QEvent::PaletteChange) { + updateThemedPixmap(); + } +#endif + QLabel::changeEvent(e); +} + +void ThemedLabel::updateThemedPixmap() +{ + setPixmap(m_platform_style->SingleColorIcon(m_image_filename).pixmap(m_pixmap_width, m_pixmap_height)); +} + void ClickableLabel::mouseReleaseEvent(QMouseEvent *event) { Q_EMIT clicked(event->pos()); diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index a1cf274354..31e7aa7335 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -27,6 +27,7 @@ #include <chrono> #include <utility> +class PlatformStyle; class QValidatedLineEdit; class SendCoinsRecipient; @@ -221,6 +222,25 @@ namespace GUIUtil qreal calculateIdealFontSize(int width, const QString& text, QFont font, qreal minPointSize = 4, qreal startPointSize = 14); + class ThemedLabel : public QLabel + { + Q_OBJECT + + public: + explicit ThemedLabel(const PlatformStyle* platform_style, QWidget* parent = nullptr); + void setThemedPixmap(const QString& image_filename, int width, int height); + + protected: + void changeEvent(QEvent* e) override; + + private: + const PlatformStyle* m_platform_style; + QString m_image_filename; + int m_pixmap_width; + int m_pixmap_height; + void updateThemedPixmap(); + }; + class ClickableLabel : public QLabel { Q_OBJECT |