changeset 1822:0bc6caf87658

Merge from branch background-mode
author Chris Cannam
date Fri, 24 Jan 2020 15:10:35 +0000
parents 23d5cb3f9f38 (current diff) 472865574b1a (diff)
children 1cd161242250
files
diffstat 2 files changed, 48 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/system/System.cpp	Tue Jan 14 15:48:22 2020 +0000
+++ b/system/System.cpp	Fri Jan 24 15:10:35 2020 +0000
@@ -27,6 +27,10 @@
 #include <unistd.h>
 #endif
 
+#ifdef _MSC_VER
+#include <winrt/Windows.UI.ViewManagement.h>
+#endif
+
 #ifdef __APPLE__
 #include <sys/param.h>
 #include <sys/sysctl.h>
@@ -334,6 +338,39 @@
     }
 }
 
+bool
+OSReportsDarkThemeActive()
+{
+    SVCERR << "OSReportsDarkThemeActive() called" << endl;
+#ifdef _MSC_VER
+    using namespace winrt::Windows::UI::ViewManagement;
+    UISettings settings;
+    auto background = settings.GetColorValue(UIColorType::Background);
+    if (int(background.R) + int(background.G) + int(background.B) < 384) {
+        return true;
+    }
+#endif
+    return false;
+}
+
+bool
+OSQueryAccentColour(int &r, int &g, int &b)
+{
+    SVCERR << "OSQueryAccentColour() called" << endl;
+#ifdef _MSC_VER
+    using namespace winrt::Windows::UI::ViewManagement;
+    bool dark = OSReportsDarkThemeActive();
+    UISettings settings;
+    auto accent = settings.GetColorValue
+        (dark ? UIColorType::AccentLight1 : UIColorType::Accent);
+    r = accent.R;
+    g = accent.G;
+    b = accent.B;
+    return true;
+#endif
+    return false;
+}
+
 double mod(double x, double y) { return x - (y * floor(x / y)); }
 float modf(float x, float y) { return x - (y * floorf(x / y)); }
 
--- a/system/System.h	Tue Jan 14 15:48:22 2020 +0000
+++ b/system/System.h	Fri Jan 24 15:10:35 2020 +0000
@@ -163,6 +163,17 @@
 // if unknown. (Hence signed return type)
 extern ssize_t GetDiscSpaceMBAvailable(const char *path);
 
+// Return true if the OS desktop is set to use a dark mode
+// theme. Return false if it is set to a light theme or if the theme
+// is unknown.
+extern bool OSReportsDarkThemeActive();
+
+// Return true if the OS desktop reports an accent colour to go with
+// the current theme; if so, also return by reference the r, g, and b
+// components of the colour (range 0-255). Return false if we can't
+// query such a thing.
+extern bool OSQueryAccentColour(int &r, int &g, int &b);
+
 extern void StoreStartupLocale();
 extern void RestoreStartupLocale();