diff --git a/atom/browser/api/atom_api_system_preferences.cc b/atom/browser/api/atom_api_system_preferences.cc index c02ada9144170..2e8674523338d 100644 --- a/atom/browser/api/atom_api_system_preferences.cc +++ b/atom/browser/api/atom_api_system_preferences.cc @@ -55,8 +55,10 @@ void SystemPreferences::BuildPrototype( v8::Local prototype) { prototype->SetClassName(mate::StringToV8(isolate, "SystemPreferences")); mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate()) -#if defined(OS_WIN) +#if defined(OS_WIN) || defined(OS_MACOSX) .SetMethod("getAccentColor", &SystemPreferences::GetAccentColor) +#endif +#if defined(OS_WIN) .SetMethod("isAeroGlassEnabled", &SystemPreferences::IsAeroGlassEnabled) .SetMethod("getColor", &SystemPreferences::GetColor) #elif defined(OS_MACOSX) diff --git a/atom/browser/api/atom_api_system_preferences.h b/atom/browser/api/atom_api_system_preferences.h index 4ec4e2e682be6..5881c34353158 100644 --- a/atom/browser/api/atom_api_system_preferences.h +++ b/atom/browser/api/atom_api_system_preferences.h @@ -49,10 +49,13 @@ class SystemPreferences : public mate::EventEmitter static void BuildPrototype(v8::Isolate* isolate, v8::Local prototype); +#if defined(OS_WIN) || defined(OS_MACOSX) + std::string GetAccentColor(); +#endif + #if defined(OS_WIN) bool IsAeroGlassEnabled(); - std::string GetAccentColor(); std::string GetColor(const std::string& color, mate::Arguments* args); void InitializeWindow(); diff --git a/atom/browser/api/atom_api_system_preferences_mac.mm b/atom/browser/api/atom_api_system_preferences_mac.mm index 505944fa1a25e..9dcf3ce4fbc78 100644 --- a/atom/browser/api/atom_api_system_preferences_mac.mm +++ b/atom/browser/api/atom_api_system_preferences_mac.mm @@ -104,6 +104,17 @@ AVMediaType ParseMediaType(const std::string& media_type) { } } +// Convert color to RGBA value like "#ABCDEF" +std::string ToRGBA(NSColor* color) { + NSString* rgbHex = [NSString + stringWithFormat:@"%02X%02X%02X%02X", (int)(color.redComponent * 0xFF), + (int)(color.greenComponent * 0xFF), + (int)(color.blueComponent * 0xFF), + (int)(color.alphaComponent * 0xFF)]; + + return std::string([rgbHex UTF8String]); +} + } // namespace void SystemPreferences::PostNotification(const std::string& name, @@ -378,6 +389,14 @@ AVMediaType ParseMediaType(const std::string& media_type) { } } +std::string SystemPreferences::GetAccentColor() { + NSColor* sysColor = nil; + if (@available(macOS 10.14, *)) + sysColor = [NSColor controlAccentColor]; + + return ToRGBA(sysColor); +} + bool SystemPreferences::IsTrustedAccessibilityClient(bool prompt) { NSDictionary* options = @{(id)kAXTrustedCheckOptionPrompt : @(prompt)}; return AXIsProcessTrustedWithOptions((CFDictionaryRef)options); diff --git a/docs/api/system-preferences.md b/docs/api/system-preferences.md index 5b70f0e4fe243..9a1052db159b7 100644 --- a/docs/api/system-preferences.md +++ b/docs/api/system-preferences.md @@ -227,7 +227,7 @@ if (browserOptions.transparent) { [dwm-composition]:https://msdn.microsoft.com/en-us/library/windows/desktop/aa969540.aspx -### `systemPreferences.getAccentColor()` _Windows_ +### `systemPreferences.getAccentColor()` _Windows_ _macOS_ Returns `String` - The users current system wide accent color preference in RGBA hexadecimal form.