From 69d7f4a7f968584fb5d1cc45906579fa26842bff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20GOLGEVIT?= Date: Fri, 13 Oct 2023 18:04:46 +0200 Subject: [PATCH] add system brightness toggle for dark mode --- qml/Shortcuts.qml | 1 + qml/menu/Top.qml | 13 ++++++++++++- src/common/appearance.cpp | 41 +++++++++++++++++++++++++++++++++------ src/common/appearance.h | 5 +++++ 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/qml/Shortcuts.qml b/qml/Shortcuts.qml index 53835bdc..c67e37b6 100644 --- a/qml/Shortcuts.qml +++ b/qml/Shortcuts.qml @@ -79,6 +79,7 @@ Popup { Tools %1+Wshow wavelength calculator %1+Dtoggle dark mode + %1+Shift+Dtoggle system brightness F1show keys combinations F2show info F3check for update diff --git a/qml/menu/Top.qml b/qml/menu/Top.qml index f4910b7b..c7b493af 100644 --- a/qml/menu/Top.qml +++ b/qml/menu/Top.qml @@ -210,13 +210,24 @@ MenuBar { MenuItem { id: darkModeSelect text: qsTr("&Dark Mode") - shortcut: "Ctrl+D" + shortcut: applicationAppearance.useSystemBrightness ? null : "Ctrl+D" checkable: true + visible: applicationAppearance.useSystemBrightness ? false : true checked: applicationAppearance.darkMode onCheckedChanged: { applicationAppearance.darkMode = darkModeSelect.checked; } } + MenuItem { + id: systemBrightness + text: qsTr("&Use system brightness") + shortcut: "Ctrl+Shift+D" + checkable: true + checked: applicationAppearance.useSystemBrightness + onCheckedChanged: { + applicationAppearance.useSystemBrightness = systemBrightness.checked; + } + } MenuItem { id: calculator text: qsTr("&Calculator") diff --git a/src/common/appearance.cpp b/src/common/appearance.cpp index 6f65a009..c739d648 100644 --- a/src/common/appearance.cpp +++ b/src/common/appearance.cpp @@ -43,7 +43,8 @@ bool Appearance::darkMode() const void Appearance::setDarkMode(const bool &setDark) { - if (setDark == darkMode()) { + if (setDark == darkMode()) + { return; } auto store = settings(); @@ -53,6 +54,29 @@ void Appearance::setDarkMode(const bool &setDark) emit darkModeChanged(setDark); } +bool Appearance::useSystemBrightness() const +{ + auto store = settings(); + Q_ASSERT(store); + + auto value = store->value("useSystemBrightness"); + return value.isValid() ? value.toBool() : true; +} + +void Appearance::setUseSystemBrightness(const bool &setSystemBrightness) +{ + if (setSystemBrightness == useSystemBrightness()) + { + return; + } + auto store = settings(); + Q_ASSERT(store); + + store->setValue("useSystemBrightness", setSystemBrightness); + emit useSystemBrightnessChanged(setSystemBrightness); + setDarkModeFromSystem(); +} + bool Appearance::experimentFunctions() const { auto store = settings(); @@ -64,7 +88,8 @@ bool Appearance::experimentFunctions() const void Appearance::setExperimentFunctions(bool value) { - if (value == experimentFunctions()) { + if (value == experimentFunctions()) + { return; } auto store = settings(); @@ -108,10 +133,13 @@ int Appearance::cursorOffset() const bool Appearance::setDarkModeFromSystem() { - bool darkMode = darkModeFromSystem(); + if (useSystemBrightness()) + { + bool darkMode = darkModeFromSystem(); - setDarkMode(darkMode); - return darkMode; + setDarkMode(darkMode); + } + return darkMode(); } Settings *Appearance::settings() const @@ -123,5 +151,6 @@ bool Appearance::darkModeFromSystem() const { QColor middleGrey(127, 127, 127); auto app = qobject_cast(QGuiApplication::instance()); - return middleGrey.lightnessF() > app->palette().color(QPalette::Window).lightnessF(); + return middleGrey.lightnessF() + > app->palette().color(QPalette::Window).lightnessF(); } diff --git a/src/common/appearance.h b/src/common/appearance.h index 65b5cc8c..2d185ca5 100644 --- a/src/common/appearance.h +++ b/src/common/appearance.h @@ -25,6 +25,7 @@ class Appearance : public QObject { Q_OBJECT Q_PROPERTY(bool darkMode READ darkMode WRITE setDarkMode NOTIFY darkModeChanged) + Q_PROPERTY(bool useSystemBrightness READ useSystemBrightness WRITE setUseSystemBrightness NOTIFY useSystemBrightnessChanged) Q_PROPERTY(bool showAboutOnStartup READ showAboutOnStartup CONSTANT) Q_PROPERTY(bool experimentFunctions READ experimentFunctions WRITE setExperimentFunctions NOTIFY experimentFunctionsChanged) @@ -44,6 +45,9 @@ class Appearance : public QObject bool darkMode() const; void setDarkMode(const bool &setDark); + bool useSystemBrightness() const; + void setUseSystemBrightness(const bool &setSystemBrightness); + bool experimentFunctions() const; void setExperimentFunctions(bool value); @@ -58,6 +62,7 @@ public slots: signals: void darkModeChanged(bool); + void useSystemBrightnessChanged(bool); void experimentFunctionsChanged(bool); void visibilityChanged();