diff options
author | Janek Bevendorff <janek@jbev.net> | 2021-01-31 22:19:01 +0300 |
---|---|---|
committer | Jonathan White <support@dmapps.us> | 2021-01-31 22:29:49 +0300 |
commit | 2889341acdafbe919d56bca76e8b256690feed94 (patch) | |
tree | eda1c65245bdc526c4df4f96c87ce4db3cbaca46 | |
parent | 874e9e10751d5d6cdf6d957f4d4eb60b70c86f2a (diff) |
Fix on/off icons not being redrawn on theme change (backport)
-rw-r--r-- | src/core/Resources.cpp | 32 | ||||
-rw-r--r-- | src/core/Resources.h | 2 | ||||
-rw-r--r-- | src/gui/EntryPreviewWidget.cpp | 9 | ||||
-rw-r--r-- | src/gui/PasswordEdit.cpp | 4 | ||||
-rw-r--r-- | src/gui/osutils/winutils/WinUtils.cpp | 15 |
5 files changed, 23 insertions, 39 deletions
diff --git a/src/core/Resources.cpp b/src/core/Resources.cpp index d602698d7..df89a4f98 100644 --- a/src/core/Resources.cpp +++ b/src/core/Resources.cpp @@ -180,7 +180,12 @@ AdaptiveIconEngine::AdaptiveIconEngine(QIcon baseIcon) void AdaptiveIconEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) { // Temporary image canvas to ensure that the background is transparent and alpha blending works. - QImage img(rect.size(), QImage::Format_ARGB32_Premultiplied); +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + auto scale = painter->device()->devicePixelRatioF(); +#else + auto scale = painter->device()->devicePixelRatio(); +#endif + QImage img(rect.size() * scale, QImage::Format_ARGB32_Premultiplied); img.fill(0); QPainter p(&img); @@ -251,30 +256,9 @@ QIcon Resources::icon(const QString& name, bool recolor, const QColor& overrideC return icon; } -QIcon Resources::onOffIcon(const QString& name, bool recolor) +QIcon Resources::onOffIcon(const QString& name, bool on, bool recolor) { - QString cacheName = "onoff/" + name; - - QIcon icon = m_iconCache.value(cacheName); - - if (!icon.isNull()) { - return icon; - } - - const QSize size(48, 48); - QIcon on = Resources::icon(name + "-on", recolor); - icon.addPixmap(on.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::On); - icon.addPixmap(on.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::On); - icon.addPixmap(on.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::On); - - QIcon off = Resources::icon(name + "-off", recolor); - icon.addPixmap(off.pixmap(size, QIcon::Mode::Normal), QIcon::Mode::Normal, QIcon::Off); - icon.addPixmap(off.pixmap(size, QIcon::Mode::Selected), QIcon::Mode::Selected, QIcon::Off); - icon.addPixmap(off.pixmap(size, QIcon::Mode::Disabled), QIcon::Mode::Disabled, QIcon::Off); - - m_iconCache.insert(cacheName, icon); - - return icon; + return icon(name + (on ? "-on" : "-off"), recolor); } Resources::Resources() diff --git a/src/core/Resources.h b/src/core/Resources.h index 6cadb5996..1b9c9b91c 100644 --- a/src/core/Resources.h +++ b/src/core/Resources.h @@ -36,7 +36,7 @@ public: QIcon trayIconUnlocked(); QString trayIconAppearance() const; QIcon icon(const QString& name, bool recolor = true, const QColor& overrideColor = QColor::Invalid); - QIcon onOffIcon(const QString& name, bool recolor = true); + QIcon onOffIcon(const QString& name, bool on, bool recolor = true); static Resources* instance(); diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp index 45a71a348..e240f7ae4 100644 --- a/src/gui/EntryPreviewWidget.cpp +++ b/src/gui/EntryPreviewWidget.cpp @@ -50,9 +50,9 @@ EntryPreviewWidget::EntryPreviewWidget(QWidget* parent) // Entry m_ui->entryTotpButton->setIcon(resources()->icon("chronometer")); m_ui->entryCloseButton->setIcon(resources()->icon("dialog-close")); - m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show")); - m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show")); - m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show")); + m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", true)); + m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", true)); + m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", true)); m_ui->entryAttachmentsWidget->setReadOnly(true); m_ui->entryAttachmentsWidget->setButtonsVisible(false); @@ -199,16 +199,19 @@ void EntryPreviewWidget::setPasswordVisible(bool state) } else { m_ui->entryPasswordLabel->setText(QString("\u25cf").repeated(6)); } + m_ui->togglePasswordButton->setIcon(resources()->onOffIcon("password-show", state)); } void EntryPreviewWidget::setEntryNotesVisible(bool state) { setNotesVisible(m_ui->entryNotesTextEdit, m_currentEntry->notes(), state); + m_ui->toggleEntryNotesButton->setIcon(resources()->onOffIcon("password-show", state)); } void EntryPreviewWidget::setGroupNotesVisible(bool state) { setNotesVisible(m_ui->groupNotesTextEdit, m_currentGroup->notes(), state); + m_ui->toggleGroupNotesButton->setIcon(resources()->onOffIcon("password-show", state)); } void EntryPreviewWidget::setNotesVisible(QTextEdit* notesWidget, const QString& notes, bool state) diff --git a/src/gui/PasswordEdit.cpp b/src/gui/PasswordEdit.cpp index b43f5c623..73f8dd0f9 100644 --- a/src/gui/PasswordEdit.cpp +++ b/src/gui/PasswordEdit.cpp @@ -58,7 +58,7 @@ PasswordEdit::PasswordEdit(QWidget* parent) #endif m_toggleVisibleAction = new QAction( - resources()->icon("password-show-off"), + resources()->onOffIcon("password-show", false), tr("Toggle Password (%1)").arg(QKeySequence(modifier + Qt::Key_H).toString(QKeySequence::NativeText)), nullptr); m_toggleVisibleAction->setCheckable(true); @@ -113,7 +113,7 @@ void PasswordEdit::enablePasswordGenerator() void PasswordEdit::setShowPassword(bool show) { setEchoMode(show ? QLineEdit::Normal : QLineEdit::Password); - m_toggleVisibleAction->setIcon(resources()->icon(show ? "password-show-on" : "password-show-off")); + m_toggleVisibleAction->setIcon(resources()->onOffIcon("password-show", show)); m_toggleVisibleAction->setChecked(show); if (m_repeatPasswordEdit) { diff --git a/src/gui/osutils/winutils/WinUtils.cpp b/src/gui/osutils/winutils/WinUtils.cpp index 9a08ef01f..04216c54f 100644 --- a/src/gui/osutils/winutils/WinUtils.cpp +++ b/src/gui/osutils/winutils/WinUtils.cpp @@ -69,19 +69,16 @@ bool WinUtils::DWMEventFilter::nativeEventFilter(const QByteArray& eventType, vo } switch (msg->message) { case WM_SETTINGCHANGE: - if (m_darkAppThemeActive != isDarkMode()) { - m_darkAppThemeActive = !m_darkAppThemeActive; - emit interfaceThemeChanged(); + if (m_instance->m_darkAppThemeActive != m_instance->isDarkMode()) { + m_instance->m_darkAppThemeActive = !m_instance->m_darkAppThemeActive; + emit m_instance->interfaceThemeChanged(); } - if (m_darkSystemThemeActive != isStatusBarDark()) { - m_darkSystemThemeActive = !m_darkSystemThemeActive; - emit statusbarThemeChanged(); + if (m_instance->m_darkSystemThemeActive != m_instance->isStatusBarDark()) { + m_instance->m_darkSystemThemeActive = !m_instance->m_darkSystemThemeActive; + emit m_instance->statusbarThemeChanged(); } break; - case WM_HOTKEY: - triggerGlobalShortcut(msg->wParam); - break; } return false; |