implement a drak mode palette and use it when needed
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Tue, 12 Nov 2024 13:16:05 +0000 (14:16 +0100)
committerMatthieu Gallien <matthieu.gallien@nextcloud.com>
Tue, 19 Nov 2024 13:09:05 +0000 (14:09 +0100)
for now unable to dynamically switch between light and dark mode

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/libsync/theme.cpp
src/libsync/theme.h

index 9a322f33808a95c9dad4b8e97e9372ae8da7740a..05a8a1ba6b6411f7321da291dd8db6cce808fb03 100644 (file)
@@ -69,7 +69,7 @@ bool shouldPreferSvg()
 
 #ifdef Q_OS_WIN
 bool isWindows11OrGreater() {
-    return QOperatingSystemVersion::current().majorVersion() >= QOperatingSystemVersion::Windows11.majorVersion();
+    return QOperatingSystemVersion::current().version() >= QOperatingSystemVersion::Windows11.version();
 }
 #endif
 
@@ -367,30 +367,40 @@ Theme::Theme()
 #if defined(Q_OS_WIN)
     // Windows does not provide a dark theme for Win32 apps so let's come up with a palette
     // Credit to https://github.com/Jorgen-VikingGod/Qt-Frameless-Window-DarkStyle
+    reserveDarkPalette = qApp->palette();
 
-    reserveDarkPalette.setColor(QPalette::Window, QColor(53, 53, 53));
     reserveDarkPalette.setColor(QPalette::WindowText, Qt::white);
-    reserveDarkPalette.setColor(QPalette::Disabled, QPalette::WindowText,
-                                QColor(127, 127, 127));
+    reserveDarkPalette.setColor(QPalette::Button, QColor(127, 127, 127));
+    reserveDarkPalette.setColor(QPalette::Light, QColor(53, 53, 53));
+    reserveDarkPalette.setColor(QPalette::Midlight, QColor(78, 78, 78));
+    reserveDarkPalette.setColor(QPalette::Dark, QColor(35, 35, 35));
+    reserveDarkPalette.setColor(QPalette::Mid, QColor(44, 44, 44));
+    reserveDarkPalette.setColor(QPalette::Text, Qt::white);
+    reserveDarkPalette.setColor(QPalette::BrightText, Qt::red);
+    reserveDarkPalette.setColor(QPalette::ButtonText, Qt::white);
     reserveDarkPalette.setColor(QPalette::Base, QColor(42, 42, 42));
+    reserveDarkPalette.setColor(QPalette::Window, QColor(53, 53, 53));
+    reserveDarkPalette.setColor(QPalette::Shadow, QColor(20, 20, 20));
+    reserveDarkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218));
+    reserveDarkPalette.setColor(QPalette::HighlightedText, Qt::white);
+    reserveDarkPalette.setColor(QPalette::Link, QColor(42, 130, 218));
+    reserveDarkPalette.setColor(QPalette::LinkVisited, QColor(42, 130, 218));
     reserveDarkPalette.setColor(QPalette::AlternateBase, QColor(66, 66, 66));
+    reserveDarkPalette.setColor(QPalette::NoRole, QColor(127, 127, 127));
     reserveDarkPalette.setColor(QPalette::ToolTipBase, Qt::white);
     reserveDarkPalette.setColor(QPalette::ToolTipText, QColor(53, 53, 53));
-    reserveDarkPalette.setColor(QPalette::Text, Qt::white);
+    reserveDarkPalette.setColor(QPalette::PlaceholderText, QColor(44, 44, 44));
+    reserveDarkPalette.setColor(QPalette::Accent, QColor(127, 127, 200));
+
     reserveDarkPalette.setColor(QPalette::Disabled, QPalette::Text, QColor(127, 127, 127));
-    reserveDarkPalette.setColor(QPalette::Dark, QColor(35, 35, 35));
-    reserveDarkPalette.setColor(QPalette::Shadow, QColor(20, 20, 20));
-    reserveDarkPalette.setColor(QPalette::Button, QColor(53, 53, 53));
-    reserveDarkPalette.setColor(QPalette::ButtonText, Qt::white);
     reserveDarkPalette.setColor(QPalette::Disabled, QPalette::ButtonText,
                                 QColor(127, 127, 127));
-    reserveDarkPalette.setColor(QPalette::BrightText, Qt::red);
-    reserveDarkPalette.setColor(QPalette::Link, QColor(42, 130, 218));
-    reserveDarkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218));
     reserveDarkPalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(80, 80, 80));
-    reserveDarkPalette.setColor(QPalette::HighlightedText, Qt::white);
     reserveDarkPalette.setColor(QPalette::Disabled, QPalette::HighlightedText,
                                 QColor(127, 127, 127));
+    reserveDarkPalette.setColor(QPalette::Disabled, QPalette::WindowText,
+                                QColor(127, 127, 127));
+    connectToPaletteSignal();
 #endif
 
 #ifdef APPLICATION_SERVER_URL_ENFORCE
@@ -974,13 +984,13 @@ void Theme::connectToPaletteSignal()
     }
 }
 
-QVariantMap Theme::systemPalette()
+QVariantMap Theme::systemPalette() const
 {
-    connectToPaletteSignal();
     auto systemPalette = QGuiApplication::palette();
 #if defined(Q_OS_WIN)
     if (darkMode() && !isWindows11OrGreater()) {
         systemPalette = reserveDarkPalette;
+        qApp->setPalette(reserveDarkPalette);
     }
 #else
 
@@ -1010,9 +1020,8 @@ QVariantMap Theme::systemPalette()
     };
 }
 
-bool Theme::darkMode()
+bool Theme::darkMode() const
 {
-    connectToPaletteSignal();
     const auto isDarkFromStyle = [] {
         switch (qGuiApp->styleHints()->colorScheme())
         {
index 707cb07d555fce76a660a3fe84bb9d813a16d1c2..37fea143ac8d9abd3aa24cebe17b2d652f45bb9e 100644 (file)
@@ -601,8 +601,8 @@ public:
 
     static constexpr const char *themePrefix = ":/client/theme/";
 
-    QVariantMap systemPalette();
-    bool darkMode();
+    [[nodiscard]] QVariantMap systemPalette() const;
+    [[nodiscard]] bool darkMode() const;
 
 public slots:
     void setOverrideServerUrl(const QString &overrideServerUrl);