Browse Source

fix: convert system colors to device color space in systemPreferences (#28171)

Co-authored-by: Samuel Attard <[email protected]>
trop[bot] 4 years ago
parent
commit
592430f918

+ 6 - 3
shell/browser/api/electron_api_system_preferences_mac.mm

@@ -26,9 +26,11 @@
 #include "shell/browser/mac/dict_util.h"
 #include "shell/browser/mac/electron_application.h"
 #include "shell/browser/ui/cocoa/NSColor+Hex.h"
+#include "shell/common/color_util.h"
 #include "shell/common/gin_converters/gurl_converter.h"
 #include "shell/common/gin_converters/value_converter.h"
 #include "shell/common/process_util.h"
+#include "skia/ext/skia_utils_mac.h"
 #include "ui/native_theme/native_theme.h"
 
 namespace gin {
@@ -384,7 +386,8 @@ std::string SystemPreferences::GetAccentColor() {
   if (@available(macOS 10.14, *))
     sysColor = [NSColor controlAccentColor];
 
-  return base::SysNSStringToUTF8([sysColor RGBAValue]);
+  return ToRGBAHex(skia::NSSystemColorToSkColor(sysColor),
+                   false /* include_hash */);
 }
 
 std::string SystemPreferences::GetSystemColor(gin_helper::ErrorThrower thrower,
@@ -413,7 +416,7 @@ std::string SystemPreferences::GetSystemColor(gin_helper::ErrorThrower thrower,
     return "";
   }
 
-  return base::SysNSStringToUTF8([sysColor hexadecimalValue]);
+  return ToRGBHex(skia::NSSystemColorToSkColor(sysColor));
 }
 
 bool SystemPreferences::CanPromptTouchID() {
@@ -571,7 +574,7 @@ std::string SystemPreferences::GetColor(gin_helper::ErrorThrower thrower,
   }
 
   if (sysColor)
-    return base::SysNSStringToUTF8([sysColor hexadecimalValue]);
+    return ToRGBHex(skia::NSSystemColorToSkColor(sysColor));
   return "";
 }
 

+ 10 - 0
shell/common/color_util.cc

@@ -51,4 +51,14 @@ std::string ToRGBHex(SkColor color) {
                             SkColorGetG(color), SkColorGetB(color));
 }
 
+std::string ToRGBAHex(SkColor color, bool include_hash) {
+  std::string color_str = base::StringPrintf(
+      "%02X%02X%02X%02X", SkColorGetR(color), SkColorGetG(color),
+      SkColorGetB(color), SkColorGetA(color));
+  if (include_hash) {
+    return "#" + color_str;
+  }
+  return color_str;
+}
+
 }  // namespace electron

+ 2 - 0
shell/common/color_util.h

@@ -17,6 +17,8 @@ SkColor ParseHexColor(const std::string& name);
 // Convert color to RGB hex value like "#ABCDEF"
 std::string ToRGBHex(SkColor color);
 
+std::string ToRGBAHex(SkColor color, bool include_hash = true);
+
 }  // namespace electron
 
 #endif  // SHELL_COMMON_COLOR_UTIL_H_