feat: add mac support to systemPrefs.getAccentColor() (#16251)

* feat: add mac support to systemPrefs.getAccentColor()

* note 10.14 retriction
This commit is contained in:
Shelley Vohr 2019-01-03 13:24:55 -08:00 committed by GitHub
parent 5c378de22f
commit 439ba5116f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 3 deletions

View file

@ -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)

View file

@ -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();

View file

@ -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"
@ -104,6 +105,14 @@ std::string ConvertAuthorizationStatus(AVAuthorizationStatusMac status) {
}
}
// Convert color to RGBA value like "#ABCDEF"
std::string ToRGBA(NSColor* color) {
return base::StringPrintf(
"%02X%02X%02X%02X", (int)(color.redComponent * 0xFF),
(int)(color.greenComponent * 0xFF), (int)(color.blueComponent * 0xFF),
(int)(color.alphaComponent * 0xFF));
}
} // namespace
void SystemPreferences::PostNotification(const std::string& name,
@ -378,6 +387,14 @@ void SystemPreferences::SetUserDefault(const std::string& name,
}
}
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);

View file

@ -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

View file

@ -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.
@ -240,6 +240,8 @@ const blue = color.substr(4, 2) // "cc"
const alpha = color.substr(6, 2) // "dd"
```
This API is only available on macOS 10.14 Mojave or newer.
### `systemPreferences.getColor(color)` _Windows_
* `color` String - One of the following values: