feat: support isHighContrastColorScheme() on macOS (#19331)

* change docs

* use NativeTheme to check high contrast scheme
This commit is contained in:
Micha Hanselmann 2019-07-19 16:04:42 -07:00 committed by Shelley Vohr
parent 1edbd30987
commit dc30b86377
3 changed files with 2 additions and 25 deletions

View file

@ -344,7 +344,7 @@ Returns one of several standard system colors that automatically adapt to vibran
Returns `Boolean` - `true` if an inverted color scheme (a high contrast color scheme with light text and dark backgrounds) is active, `false` otherwise. Returns `Boolean` - `true` if an inverted color scheme (a high contrast color scheme with light text and dark backgrounds) is active, `false` otherwise.
### `systemPreferences.isHighContrastColorScheme()` _Windows_ ### `systemPreferences.isHighContrastColorScheme()` _macOS_ _Windows_
Returns `Boolean` - `true` if a high contrast theme is active, `false` otherwise. Returns `Boolean` - `true` if a high contrast theme is active, `false` otherwise.

View file

@ -39,11 +39,9 @@ bool SystemPreferences::IsInvertedColorScheme() {
return color_utils::IsInvertedColorScheme(); return color_utils::IsInvertedColorScheme();
} }
#if !defined(OS_WIN)
bool SystemPreferences::IsHighContrastColorScheme() { bool SystemPreferences::IsHighContrastColorScheme() {
return false; return ui::NativeTheme::GetInstanceForNativeUi()->UsesHighContrastColors();
} }
#endif // !defined(OS_WIN)
v8::Local<v8::Value> SystemPreferences::GetAnimationSettings( v8::Local<v8::Value> SystemPreferences::GetAnimationSettings(
v8::Isolate* isolate) { v8::Isolate* isolate) {

View file

@ -20,18 +20,6 @@ namespace {
const wchar_t kSystemPreferencesWindowClass[] = const wchar_t kSystemPreferencesWindowClass[] =
L"Electron_SystemPreferencesHostWindow"; L"Electron_SystemPreferencesHostWindow";
bool g_is_high_contract_color_scheme = false;
bool g_is_high_contract_color_scheme_initialized = false;
void UpdateHighContrastColorScheme() {
HIGHCONTRAST high_contrast = {0};
high_contrast.cbSize = sizeof(HIGHCONTRAST);
g_is_high_contract_color_scheme =
SystemParametersInfo(SPI_GETHIGHCONTRAST, 0, &high_contrast, 0) &&
((high_contrast.dwFlags & HCF_HIGHCONTRASTON) != 0);
g_is_high_contract_color_scheme_initialized = true;
}
} // namespace } // namespace
namespace api { namespace api {
@ -40,12 +28,6 @@ bool SystemPreferences::IsAeroGlassEnabled() {
return ui::win::IsAeroGlassEnabled(); return ui::win::IsAeroGlassEnabled();
} }
bool SystemPreferences::IsHighContrastColorScheme() {
if (!g_is_high_contract_color_scheme_initialized)
UpdateHighContrastColorScheme();
return g_is_high_contract_color_scheme;
}
std::string hexColorDWORDToRGBA(DWORD color) { std::string hexColorDWORDToRGBA(DWORD color) {
DWORD rgba = color << 8 | color >> 24; DWORD rgba = color << 8 | color >> 24;
std::ostringstream stream; std::ostringstream stream;
@ -188,9 +170,6 @@ LRESULT CALLBACK SystemPreferences::WndProc(HWND hwnd,
Emit("accent-color-changed", hexColorDWORDToRGBA(new_color)); Emit("accent-color-changed", hexColorDWORDToRGBA(new_color));
current_color_ = new_color_string; current_color_ = new_color_string;
} }
} else if (message == WM_SYSCOLORCHANGE ||
(message == WM_SETTINGCHANGE && wparam == SPI_SETHIGHCONTRAST)) {
UpdateHighContrastColorScheme();
} }
return ::DefWindowProc(hwnd, message, wparam, lparam); return ::DefWindowProc(hwnd, message, wparam, lparam);
} }