feat: add mac support to systemPrefs.getAccentColor() (#16251)
* feat: add mac support to systemPrefs.getAccentColor() * note 10.14 retriction
This commit is contained in:
parent
5c378de22f
commit
439ba5116f
5 changed files with 32 additions and 3 deletions
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue