Rewrite WIN_GetSystemTheme() so we don't need to bump Windows SDK versions

This commit is contained in:
Sam Lantinga 2023-03-10 16:29:42 -08:00
parent edc8f0b841
commit c044cff4c7
2 changed files with 14 additions and 13 deletions

View File

@ -41,7 +41,7 @@
#elif defined(HAVE_SHELLSCALINGAPI_H)
#define _WIN32_WINNT 0x603 /* For DPI support */
#else
#define _WIN32_WINNT 0x502 /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices(), 0x501 for raw input, 0x502 for RegGetValue() */
#define _WIN32_WINNT 0x501 /* Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices(), 0x501 for raw input */
#endif
#define WINVER _WIN32_WINNT

View File

@ -680,21 +680,22 @@ SDL_bool SDL_DXGIGetOutputInfo(SDL_DisplayID displayID, int *adapterIndex, int *
SDL_SystemTheme WIN_GetSystemTheme(void)
{
DWORD type;
DWORD value;
DWORD count = sizeof(value);
LSTATUS status;
SDL_SystemTheme theme = SDL_SYSTEM_THEME_LIGHT;
HKEY hKey;
DWORD dwType = REG_DWORD;
DWORD value = ~0;
DWORD length = sizeof(value);
/* Technically this isn't the system theme, but it's the preference for applications */
status = RegGetValue(HKEY_CURRENT_USER,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"),
TEXT("AppsUseLightTheme"),
RRF_RT_REG_DWORD, &type, &value, &count);
if (status == ERROR_SUCCESS && type == REG_DWORD && value == 0) {
return SDL_SYSTEM_THEME_DARK;
} else {
return SDL_SYSTEM_THEME_LIGHT;
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
if (RegQueryValueExW(hKey, L"AppsUseLightTheme", 0, &dwType, (LPBYTE)&value, &length) == ERROR_SUCCESS) {
if (value == 0) {
theme = SDL_SYSTEM_THEME_DARK;
}
}
RegCloseKey(hKey);
}
return theme;
}
SDL_bool WIN_IsPerMonitorV2DPIAware(_THIS)