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 2477af8ea0b3b20754a2e138685c892134c67f06..90a1d56cde9247b2d514518968e11ec2f9121dee 100644 |
| --- a/ui/native_theme/native_theme_mac.mm |
| +++ b/ui/native_theme/native_theme_mac.mm |
| @@ -12,10 +12,23 @@ |
| #include "base/mac/sdk_forward_declarations.h" |
| #include "ui/native_theme/common_theme.h" |
| #import "skia/ext/skia_utils_mac.h" |
| +#include "third_party/skia/include/effects/SkGradientShader.h" |
| +#include "ui/gfx/geometry/rect.h" |
| #include "ui/gfx/skia_util.h" |
| namespace { |
| +const SkColor kScrollerTrackGradientColors[] = { |
| + SkColorSetRGB(0xF0, 0xF0, 0xF0), |
| + SkColorSetRGB(0xFA, 0xFA, 0xFA), |
| + SkColorSetRGB(0xFD, 0xFD, 0xFD), |
| + SkColorSetRGB(0xF5, 0xF5, 0xF5) }; |
| +const SkColor kScrollerTrackBorderColor = SkColorSetRGB(0xE4, 0xE4, 0xE4); |
| +const SkColor kScrollerThumbColor = SkColorSetARGB(0x38, 0, 0, 0); |
| +const SkColor kScrollerThumbHoverColor = SkColorSetARGB(0x80, 0, 0, 0); |
| +const int kScrollerTrackBorderWidth = 1; |
| +const int kScrollerThumbInset = 3; |
|
tapted
2014/08/13 01:13:29
nit: this one probably needs a comment - it's a bi
Andre
2014/08/13 20:04:21
Done.
|
| + |
| // Values calculated by reading pixels and solving simultaneous equations |
| // derived from "A over B" alpha compositing. Steps: Sample the semi-transparent |
| // pixel over two backgrounds; P1, P2 over backgrounds B1, B2. Use the color |
| @@ -184,6 +197,80 @@ SkColor NativeThemeMac::GetSystemColor(ColorId color_id) const { |
| return FallbackTheme::GetSystemColor(color_id); |
| } |
| +void NativeThemeMac::PaintScrollbarTrack( |
| + SkCanvas* canvas, |
| + Part part, |
| + State state, |
| + const ScrollbarTrackExtraParams& extra_params, |
| + const gfx::Rect& rect) const { |
| + SkPoint gradient_bounds[2]; |
|
tapted
2014/08/13 01:13:29
nit: perhaps a comment in here saying which style
Andre
2014/08/13 20:04:22
Done.
|
| + if (part == kScrollbarVerticalTrack) { |
| + gradient_bounds[0].set(rect.x() + kScrollerTrackBorderWidth, rect.y()); |
| + gradient_bounds[1].set(rect.right(), rect.y()); |
| + } else { |
| + gradient_bounds[0].set(rect.x(), rect.y() + kScrollerTrackBorderWidth); |
|
tapted
2014/08/13 01:13:29
nit: DCHECK_EQ(part, kScrollbarHorizontalTrack);
Andre
2014/08/13 20:04:22
Done.
|
| + gradient_bounds[1].set(rect.x(), rect.bottom()); |
| + } |
| + skia::RefPtr<SkShader> shader = skia::AdoptRef( |
| + SkGradientShader::CreateLinear(gradient_bounds, |
| + kScrollerTrackGradientColors, |
| + NULL, |
| + 4, |
|
tapted
2014/08/13 01:13:29
nit: 4 -> arraysize(kScrollerTrackGradientColors)
Andre
2014/08/13 20:04:22
Done.
|
| + SkShader::kClamp_TileMode)); |
| + SkPaint gradient; |
| + gradient.setShader(shader.get()); |
| + |
| + SkIRect track_rect; |
| + track_rect.set(rect.x(), rect.y(), rect.right(), rect.bottom()); |
| + canvas->drawIRect(track_rect, gradient); |
| + |
| + // Draw line border next to content area. |
| + SkPaint paint; |
| + paint.setColor(kScrollerTrackBorderColor); |
| + if (part == kScrollbarVerticalTrack) { |
| + canvas->drawRectCoords(track_rect.left(), |
| + track_rect.top(), |
| + track_rect.left() + kScrollerTrackBorderWidth, |
| + track_rect.bottom(), |
| + paint); |
| + } else { |
| + canvas->drawRectCoords(track_rect.left(), |
| + track_rect.top(), |
| + track_rect.right(), |
| + track_rect.top() + kScrollerTrackBorderWidth, |
| + paint); |
| + } |
| +} |
| + |
| +void NativeThemeMac::PaintScrollbarThumb(SkCanvas* canvas, |
| + Part part, |
| + State state, |
| + const gfx::Rect& rect) const { |
| + gfx::Rect thumb_rect(rect); |
| + switch (part) { |
| + case kScrollbarHorizontalThumb: |
| + thumb_rect.Inset(0, kScrollerTrackBorderWidth, 0, 0); |
| + break; |
| + case kScrollbarVerticalThumb: |
| + thumb_rect.Inset(kScrollerTrackBorderWidth, 0, 0, 0); |
| + break; |
| + default: |
| + NOTREACHED(); |
| + break; |
| + } |
| + |
| + thumb_rect.Inset(kScrollerThumbInset, kScrollerThumbInset); |
| + |
| + SkPaint paint; |
|
tapted
2014/08/13 01:13:29
Looking at the screenshots.. I think we want paint
Andre
2014/08/13 20:04:22
Done.
|
| + paint.setColor(state == kHovered ? thumb_active_color_ |
|
tapted
2014/08/13 01:13:29
hm - it's odd there are protected data members in
Andre
2014/08/13 20:04:22
Acknowledged.
|
| + : thumb_inactive_color_); |
| + SkRect skrect; |
| + skrect.set( |
| + thumb_rect.x(), thumb_rect.y(), thumb_rect.right(), thumb_rect.bottom()); |
| + const SkScalar radius = std::min(skrect.width(), skrect.height()); |
| + canvas->drawRoundRect(skrect, radius, radius, paint); |
| +} |
| + |
| void NativeThemeMac::PaintMenuPopupBackground( |
| SkCanvas* canvas, |
| const gfx::Size& size, |
| @@ -217,6 +304,10 @@ void NativeThemeMac::PaintMenuItemBackground( |
| } |
| NativeThemeMac::NativeThemeMac() { |
| + set_scrollbar_button_length(0); |
| + SetScrollbarColors(kScrollerThumbColor, |
| + kScrollerThumbHoverColor, |
| + kScrollerTrackGradientColors[0]); |
| } |
| NativeThemeMac::~NativeThemeMac() { |