Chromium Code Reviews| 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..889d1a7937709211e3896720553daca8d3dc401f 100644 |
| --- a/ui/native_theme/native_theme_mac.mm |
| +++ b/ui/native_theme/native_theme_mac.mm |
| @@ -91,6 +91,15 @@ SkColor NSSystemColorToSkColor(NSColor* color) { |
| SkScalarRoundToInt(255.0 * components[0])); |
| } |
| +// Converts an SkColor to grayscale by flat averaging of components, preserving |
| +// the alpha channel. |
| +SkColor ColorToGrayscale(SkColor color) { |
| + uint8_t component = (SkColorGetR(color) + |
| + SkColorGetG(color) + |
| + SkColorGetB(color)) / 3; |
|
Avi (use Gerrit)
2016/08/19 00:21:48
Do we want to do a luminosity average here? http:/
Elly Fong-Jones
2016/08/22 18:17:57
Hm! Originally when I tried out luminance it looke
|
| + return SkColorSetARGB(SkColorGetA(color), component, component, component); |
| +} |
| + |
| } // namespace |
| namespace ui { |
| @@ -106,6 +115,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 +149,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 +305,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 +341,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 +358,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}; |