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/guiutil.cpp | |
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/guiutil.cpp')
-rw-r--r-- | src/qt/guiutil.cpp | 31 |
1 files changed, 31 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()); |