aboutsummaryrefslogtreecommitdiff
path: root/src/qt/guiutil.cpp
diff options
context:
space:
mode:
authorHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2021-04-08 14:27:14 +0300
committerHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2021-05-01 15:07:10 +0300
commitd99ef327a885874fed1c4e35e0f47b10290c6bd9 (patch)
tree2bb07f9c8daef56dc4b00549421738de68985845 /src/qt/guiutil.cpp
parentc054720e08b5549913f54b9b4bc4e4002617ff23 (diff)
downloadbitcoin-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.cpp31
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());