diff options
-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 |