From 904432ea82f05e3f81aadefdfb7b8b603be4e40a Mon Sep 17 00:00:00 2001
From: tobtoht <thotbot@protonmail.com>
Date: Wed, 3 Feb 2021 20:40:35 +0100
Subject: [PATCH] Calc: update exchange icon on skin change

---
 src/calcwidget.cpp        |  9 +++++++--
 src/calcwidget.h          |  1 +
 src/calcwidget.ui         |  9 ++++++++-
 src/components.cpp        | 18 ++++++++++++++++++
 src/components.h          | 17 +++++++++++++++++
 src/mainwindow.cpp        |  2 ++
 src/utils/ColorScheme.cpp |  2 +-
 7 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/src/calcwidget.cpp b/src/calcwidget.cpp
index dbfbdfc..93bd7b9 100644
--- a/src/calcwidget.cpp
+++ b/src/calcwidget.cpp
@@ -6,6 +6,8 @@
 #include "calcwidget.h"
 #include "ui_calcwidget.h"
 #include "mainwindow.h"
+#include "components.h"
+#include "utils/ColorScheme.h"
 
 CalcWidget::CalcWidget(QWidget *parent) :
         QWidget(parent),
@@ -15,8 +17,7 @@ CalcWidget::CalcWidget(QWidget *parent) :
     m_ctx = MainWindow::getContext();
 
     ui->imageExchange->setBackgroundRole(QPalette::Base);
-    QPixmap pm(":/assets/images/exchange.png");
-    ui->imageExchange->setPixmap(pm);
+    ui->imageExchange->setAssets(":/assets/images/exchange.png", ":/assets/images/exchange_white.png");
     ui->imageExchange->setScaledContents(true);
     ui->imageExchange->setFixedSize(26, 26);
 
@@ -134,6 +135,10 @@ void CalcWidget::initComboBox() {
     this->m_comboBoxInit = true;
 }
 
+void CalcWidget::skinChanged() {
+    ui->imageExchange->setMode(ColorScheme::hasDarkBackground(this));
+}
+
 CalcWidget::~CalcWidget() {
     delete ui;
 }
diff --git a/src/calcwidget.h b/src/calcwidget.h
index 04d6e8b..42f94bf 100644
--- a/src/calcwidget.h
+++ b/src/calcwidget.h
@@ -28,6 +28,7 @@ public slots:
     void toComboChanged(const QString& data);
     void initFiat();
     void initCrypto();
+    void skinChanged();
 
 private:
     Ui::CalcWidget *ui;
diff --git a/src/calcwidget.ui b/src/calcwidget.ui
index 674516b..dbd49bb 100644
--- a/src/calcwidget.ui
+++ b/src/calcwidget.ui
@@ -84,7 +84,7 @@
             </layout>
            </item>
            <item row="0" column="1">
-            <widget class="QLabel" name="imageExchange">
+            <widget class="DoublePixmapLabel" name="imageExchange">
              <property name="text">
               <string>exchange image</string>
              </property>
@@ -159,6 +159,13 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>DoublePixmapLabel</class>
+   <extends>QLabel</extends>
+   <header>components.h</header>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections>
   <connection>
diff --git a/src/components.cpp b/src/components.cpp
index 9e3ae51..4e02c65 100644
--- a/src/components.cpp
+++ b/src/components.cpp
@@ -5,6 +5,24 @@
 
 #include <QtWidgets>
 
+DoublePixmapLabel::DoublePixmapLabel(QWidget *parent)
+        : QLabel(parent)
+{}
+
+void DoublePixmapLabel::setAssets(const QString &firstAsset, const QString &secondAsset)
+{
+    m_first.load(firstAsset);
+    m_second.load(secondAsset);
+    this->setPixmap(m_first);
+}
+
+void DoublePixmapLabel::setMode(bool mode) {
+    if (mode != m_mode) {
+        this->setPixmap(mode ? m_second : m_first);
+    }
+    m_mode = mode;
+}
+
 StatusBarButton::StatusBarButton(const QIcon &icon, const QString &tooltip, QWidget *parent) : QPushButton(parent) {
     setIcon(icon);
     setToolTip(tooltip);
diff --git a/src/components.h b/src/components.h
index 996fdbc..546c27b 100644
--- a/src/components.h
+++ b/src/components.h
@@ -11,6 +11,23 @@
 #include <QPlainTextEdit>
 #include <QLineEdit>
 
+class DoublePixmapLabel : public QLabel
+{
+Q_OBJECT
+
+public:
+    explicit DoublePixmapLabel(QWidget *parent = nullptr);
+
+public slots:
+    void setAssets(const QString &firstAsset, const QString &secondAsset);
+    void setMode(bool mode);
+
+private:
+    bool m_mode = false;
+    QPixmap m_first;
+    QPixmap m_second;
+};
+
 class StatusBarButton : public QPushButton
 {
     Q_OBJECT
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 4191ef6..0f3c6fc 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1019,6 +1019,8 @@ void MainWindow::skinChanged(const QString &skinName) {
     qApp->setStyleSheet(m_skins[skinName]);
     qDebug() << QString("Skin changed to %1").arg(skinName);
     ColorScheme::updateFromWidget(this);
+
+    ui->conversionWidget->skinChanged();
 }
 
 void MainWindow::closeEvent(QCloseEvent *event) {
diff --git a/src/utils/ColorScheme.cpp b/src/utils/ColorScheme.cpp
index be4555a..4862c11 100644
--- a/src/utils/ColorScheme.cpp
+++ b/src/utils/ColorScheme.cpp
@@ -20,7 +20,7 @@ bool ColorScheme::hasDarkBackground(QWidget *widget) {
 }
 
 void ColorScheme::updateFromWidget(QWidget *widget, bool forceDark) {
-    darkScheme = forceDark or ColorScheme::hasDarkBackground(widget);
+    darkScheme = forceDark || ColorScheme::hasDarkBackground(widget);
 }
 
 QString ColorSchemeItem::asStylesheet(bool background) {