feat: support isHighContrastColorScheme()
on macOS (#19331)
* change docs * use NativeTheme to check high contrast scheme
This commit is contained in:
parent
1edbd30987
commit
dc30b86377
3 changed files with 2 additions and 25 deletions
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue