Skip to content

Commit

Permalink
feat: add mac support to systemPrefs.getColor()
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Jan 3, 2019
1 parent 3f1d227 commit 5efc064
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 3 deletions.
4 changes: 3 additions & 1 deletion atom/browser/api/atom_api_system_preferences.cc
Expand Up @@ -55,8 +55,10 @@ void SystemPreferences::BuildPrototype(
v8::Local<v8::FunctionTemplate> 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)
Expand Down
5 changes: 4 additions & 1 deletion atom/browser/api/atom_api_system_preferences.h
Expand Up @@ -49,10 +49,13 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences>
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::FunctionTemplate> 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();
Expand Down
15 changes: 15 additions & 0 deletions atom/browser/api/atom_api_system_preferences_mac.mm
Expand Up @@ -13,6 +13,7 @@
#include "atom/browser/mac/dict_util.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "base/strings/stringprintf.h"
#include "base/strings/sys_string_conversions.h"
#include "base/values.h"
#include "native_mate/object_template_builder.h"
Expand Down Expand Up @@ -104,6 +105,12 @@ AVMediaType ParseMediaType(const std::string& media_type) {
}
}

// Convert color to RGBA value like "#ABCDEF"
std::string ToRGBHex(NSColor* color) {
return base::StringPrintf("#%02X%02X%02X", (int)(color.redComponent * 0xFF),
(int)(color.greenComponent * 0xFF),
(int)(color.blueComponent * 0xFF));
}
} // namespace

void SystemPreferences::PostNotification(const std::string& name,
Expand Down Expand Up @@ -378,6 +385,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);
Expand Down
5 changes: 5 additions & 0 deletions atom/browser/mac/atom_application.h
Expand Up @@ -37,6 +37,11 @@ typedef NS_ENUM(NSInteger, AVAuthorizationStatusMac) {
(AVMediaType)mediaType API_AVAILABLE(macosx(10.14));
@end

@interface NSColor (MojaveSDK)
@property(class, strong, readonly)
NSColor* controlAccentColor API_AVAILABLE(macosx(10.14));
@end

extern "C" {
#if !defined(MAC_OS_X_VERSION_10_14) || \
MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_14
Expand Down
2 changes: 1 addition & 1 deletion docs/api/system-preferences.md
Expand Up @@ -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.
Expand Down

0 comments on commit 5efc064

Please sign in to comment.