qt: Add GUIUtil::ThemedLabel class

The ThemedLabel class correctly handles appearance changes on macOS.
This commit is contained in:
Hennadii Stepanov 2021-04-08 14:27:14 +03:00
parent c054720e08
commit d99ef327a8
No known key found for this signature in database
GPG key ID: 410108112E7EA81F
2 changed files with 51 additions and 0 deletions

View file

@ -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());

View file

@ -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