3#if defined(_WIN32) || defined(_WIN64)
4# define XC_PLATFORM_WINDOWS 1
5# define GLFW_EXPOSE_NATIVE_WIN32
6# include <GLFW/glfw3.h>
7# include <GLFW/glfw3native.h>
10# pragma comment(lib, "dwmapi.lib")
11#elif defined(__APPLE__)
12# define XC_PLATFORM_MACOS 1
13# include <TargetConditionals.h>
15# define XC_PLATFORM_MAC 1
17#elif defined(__linux__)
18# define XC_PLATFORM_LINUX 1
23#ifdef XC_PLATFORM_WINDOWS
24# ifndef DWMWA_USE_IMMERSIVE_DARK_MODE
25# define DWMWA_USE_IMMERSIVE_DARK_MODE 20
27# ifndef DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1
28# define DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 19
38 if (!window)
return false;
40#if defined(XC_PLATFORM_WINDOWS)
42 HWND hwnd = glfwGetWin32Window(window);
43 if (!hwnd)
return false;
46 BOOL useDarkMode = TRUE;
47 HRESULT result = DwmSetWindowAttribute(hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE,
48 &useDarkMode,
sizeof(useDarkMode));
52 result = DwmSetWindowAttribute(
53 hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, &useDarkMode,
57 if (SUCCEEDED(result)) {
60 if (GetWindowRect(hwnd, &rect)) {
61 SetWindowPos(hwnd, NULL, rect.left, rect.top,
62 rect.right - rect.left, rect.bottom - rect.top - 1,
63 SWP_NOZORDER | SWP_FRAMECHANGED);
64 SetWindowPos(hwnd, NULL, rect.left, rect.top,
65 rect.right - rect.left, rect.bottom - rect.top,
66 SWP_NOZORDER | SWP_FRAMECHANGED);
72#elif defined(XC_PLATFORM_MAC)
77 "macOS dark titlebar support requires Objective-C implementation")
80#elif defined(XC_PLATFORM_LINUX)
85 "Linux dark titlebar support depends on desktop environment")
90# pragma message("Dark titlebar not supported on this platform")
101 if (!window)
return false;
103#if defined(XC_PLATFORM_WINDOWS)
104 HWND hwnd = glfwGetWin32Window(window);
105 if (!hwnd)
return false;
107 BOOL useDarkMode = FALSE;
108 HRESULT result = DwmSetWindowAttribute(hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE,
109 &useDarkMode,
sizeof(useDarkMode));
111 if (FAILED(result)) {
112 result = DwmSetWindowAttribute(
113 hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, &useDarkMode,
114 sizeof(useDarkMode));
117 if (SUCCEEDED(result)) {
120 if (GetWindowRect(hwnd, &rect)) {
121 SetWindowPos(hwnd, NULL, rect.left, rect.top,
122 rect.right - rect.left, rect.bottom - rect.top,
123 SWP_NOZORDER | SWP_FRAMECHANGED);
136XCAL_API inline const char* get_platform_name() {
137#if defined(XC_PLATFORM_WINDOWS)
139#elif defined(XC_PLATFORM_MAC)
141#elif defined(XC_PLATFORM_LINUX)
struct GLFWwindow GLFWwindow