| Index: ui/native_theme/native_theme_mac.mm
|
| diff --git a/ui/native_theme/native_theme_mac.mm b/ui/native_theme/native_theme_mac.mm
|
| index 4b34bf7d12c77bb43e634f19c66017de978d07bb..311fe751615d8a7edc8160c3b7e6ed855f6b366b 100644
|
| --- a/ui/native_theme/native_theme_mac.mm
|
| +++ b/ui/native_theme/native_theme_mac.mm
|
| @@ -91,6 +91,17 @@ SkColor NSSystemColorToSkColor(NSColor* color) {
|
| SkScalarRoundToInt(255.0 * components[0]));
|
| }
|
|
|
| +// Converts an SkColor to grayscale by using luminance for all three components.
|
| +// Experimentally, this seems to produce a better result than a flat average or
|
| +// a min/max average for UI controls.
|
| +SkColor ColorToGrayscale(SkColor color) {
|
| + SkScalar luminance = SkColorGetR(color) * 0.21 +
|
| + SkColorGetG(color) * 0.72 +
|
| + SkColorGetB(color) * 0.07;
|
| + uint8_t component = SkScalarRoundToInt(luminance);
|
| + return SkColorSetARGB(SkColorGetA(color), component, component, component);
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace ui {
|
| @@ -106,6 +117,13 @@ NativeThemeMac* NativeThemeMac::instance() {
|
| return &s_native_theme;
|
| }
|
|
|
| +// static
|
| +SkColor NativeThemeMac::ApplySystemControlTint(SkColor color) {
|
| + if ([NSColor currentControlTint] == NSGraphiteControlTint)
|
| + return ColorToGrayscale(color);
|
| + return color;
|
| +}
|
| +
|
| SkColor NativeThemeMac::GetSystemColor(ColorId color_id) const {
|
| // TODO(tapted): Add caching for these, and listen for
|
| // NSSystemColorsDidChangeNotification.
|
| @@ -133,6 +151,8 @@ SkColor NativeThemeMac::GetSystemColor(ColorId color_id) const {
|
| case kColorId_EnabledMenuButtonBorderColor:
|
| case kColorId_LabelEnabledColor:
|
| return NSSystemColorToSkColor([NSColor controlTextColor]);
|
| + case kColorId_CallToActionColor:
|
| + return NSSystemColorToSkColor([NSColor controlTextColor]);
|
| case kColorId_ButtonDisabledColor:
|
| case kColorId_LabelDisabledColor:
|
| return NSSystemColorToSkColor([NSColor disabledControlTextColor]);
|
| @@ -287,6 +307,9 @@ sk_sp<SkShader> NativeThemeMac::GetButtonBackgroundShader(
|
|
|
| SkColor gradient_colors[] = {start_colors[type], end_colors[type]};
|
|
|
| + for (size_t i = 0; i < arraysize(gradient_colors); ++i)
|
| + gradient_colors[i] = ApplySystemControlTint(gradient_colors[i]);
|
| +
|
| return SkGradientShader::MakeLinear(
|
| gradient_points, gradient_colors, gradient_positions,
|
| arraysize(gradient_positions),
|
| @@ -320,6 +343,9 @@ sk_sp<SkShader> NativeThemeMac::GetButtonBorderShader(ButtonBackgroundType type,
|
|
|
| SkColor gradient_colors[] = {top_edge[type], bottom_edge[type]};
|
|
|
| + for (size_t i = 0; i < arraysize(gradient_colors); ++i)
|
| + gradient_colors[i] = ApplySystemControlTint(gradient_colors[i]);
|
| +
|
| return SkGradientShader::MakeLinear(
|
| gradient_points, gradient_colors, gradient_positions,
|
| arraysize(gradient_positions), SkShader::kClamp_TileMode);
|
| @@ -334,7 +360,8 @@ void NativeThemeMac::PaintStyledGradientButton(SkCanvas* canvas,
|
| bool focus) {
|
| const SkScalar kBorderThickness = 1;
|
| const SkScalar kFocusRingThickness = 4;
|
| - const SkColor kFocusRingColor = SkColorSetARGB(0x94, 0x79, 0xa7, 0xe9);
|
| + const SkColor kFocusRingColor = ApplySystemControlTint(
|
| + SkColorSetARGB(0x94, 0x79, 0xa7, 0xe9));
|
|
|
| const SkVector kNoCurve = {0, 0};
|
| const SkVector kCurve = {kButtonCornerRadius, kButtonCornerRadius};
|
|
|