Index: ui/views/controls/button/toggle_button.cc |
diff --git a/ui/views/controls/button/toggle_button.cc b/ui/views/controls/button/toggle_button.cc |
index 9d700a8b4e77e5830d948640bbb6622f43ae1c89..4a4cb3d7c1006f427aea8bb5b14623ebeb62bd8f 100644 |
--- a/ui/views/controls/button/toggle_button.cc |
+++ b/ui/views/controls/button/toggle_button.cc |
@@ -4,6 +4,8 @@ |
#include "ui/views/controls/button/toggle_button.h" |
+#include "third_party/skia/include/core/SkDrawLooper.h" |
+#include "third_party/skia/include/core/SkPaint.h" |
#include "ui/gfx/canvas.h" |
#include "ui/gfx/color_utils.h" |
#include "ui/views/border.h" |
@@ -16,10 +18,13 @@ namespace { |
const int kTrackHeight = 14; |
const int kTrackWidth = 36; |
// Margins from edge of track to edge of view. |
-const int kTrackVerticalMargin = 4; |
-const int kTrackHorizontalMargin = 1; |
-// Margin from edge of thumb to closest three edges of view. |
-const int kThumbMargin = 1; |
+const int kTrackVerticalMargin = 6; |
+const int kTrackHorizontalMargin = 2; |
+// Margin from edge of thumb to closest edge of view. Note that the thumb |
+// margins must be sufficiently large to allow space for the shadow. |
+const int kThumbHorizontalMargin = 2; |
+// Margin from top/bottom edge of thumb to top/bottom edge of view. |
+const int kThumbVerticalMargin = 3; |
} // namespace |
@@ -57,38 +62,43 @@ void ToggleButton::OnPaint(gfx::Canvas* canvas) { |
SkAlpha blend = |
static_cast<SkAlpha>(SK_AlphaOPAQUE * slide_animation_.GetCurrentValue()); |
- gfx::RectF track_rect(GetContentsBounds()); |
- SkPaint paint; |
- paint.setAntiAlias(true); |
- |
// Track. |
+ gfx::RectF track_rect(GetContentsBounds()); |
+ SkPaint track_paint; |
+ track_paint.setAntiAlias(true); |
const SkColor track_on_color = |
SkColorSetA(GetNativeTheme()->GetSystemColor( |
ui::NativeTheme::kColorId_CallToActionColor), |
0xFF / 2); |
// TODO(estade): get this color from the theme. |
const SkColor track_off_color = SkColorSetA(SK_ColorBLACK, 0x61); |
- paint.setColor( |
+ track_paint.setColor( |
color_utils::AlphaBlend(track_on_color, track_off_color, blend)); |
- canvas->DrawRoundRect(track_rect, track_rect.height() / 2, paint); |
+ canvas->DrawRoundRect(track_rect, track_rect.height() / 2, track_paint); |
// Thumb. |
- const SkColor thumb_on_color = GetNativeTheme()->GetSystemColor( |
- ui::NativeTheme::kColorId_CallToActionColor); |
- // TODO(estade): get this color from the theme. |
- const SkColor thumb_off_color = SkColorSetRGB(0xFA, 0xFA, 0xFA); |
- paint.setColor( |
- color_utils::AlphaBlend(thumb_on_color, thumb_off_color, blend)); |
gfx::Rect thumb_bounds = GetLocalBounds(); |
- thumb_bounds.Inset(gfx::Insets(kThumbMargin)); |
+ thumb_bounds.Inset(gfx::Insets(kThumbVerticalMargin, kThumbHorizontalMargin)); |
thumb_bounds.set_x(thumb_bounds.x() + |
slide_animation_.GetCurrentValue() * |
(thumb_bounds.width() - thumb_bounds.height())); |
thumb_bounds.set_width(thumb_bounds.height()); |
thumb_bounds.set_x(GetMirroredXForRect(thumb_bounds)); |
+ SkPaint thumb_paint; |
+ std::vector<gfx::ShadowValue> shadows; |
+ shadows.emplace_back(gfx::Vector2d(0, 1), 5.f, |
+ SkColorSetA(SK_ColorBLACK, 0x99)); |
+ thumb_paint.setLooper(gfx::CreateShadowDrawLooperCorrectBlur(shadows)); |
+ thumb_paint.setStyle(SkPaint::kStrokeAndFill_Style); |
+ thumb_paint.setAntiAlias(true); |
+ const SkColor thumb_on_color = GetNativeTheme()->GetSystemColor( |
+ ui::NativeTheme::kColorId_CallToActionColor); |
+ // TODO(estade): get this color from the theme. |
+ const SkColor thumb_off_color = SkColorSetRGB(0xFA, 0xFA, 0xFA); |
+ thumb_paint.setColor( |
+ color_utils::AlphaBlend(thumb_on_color, thumb_off_color, blend)); |
canvas->DrawCircle(gfx::RectF(thumb_bounds).CenterPoint(), |
- thumb_bounds.height() / 2.f, paint); |
- // TODO(estade): add a shadow to the thumb. |
+ thumb_bounds.height() / 2.f, thumb_paint); |
} |
void ToggleButton::NotifyClick(const ui::Event& event) { |