Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: ui/views/controls/slider.cc

Issue 2335513002: Adding ripple effect for clicks on MD slider (Closed)
Patch Set: add disallow_copy_and_assign to testslider Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/slider.h ('k') | ui/views/test/test_slider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/slider.cc
diff --git a/ui/views/controls/slider.cc b/ui/views/controls/slider.cc
index dd1148ff1a59123e6f2c960404aee5ffe732267c..5bf9f1301d68ef2d6a05fab54846cc8f96171efa 100644
--- a/ui/views/controls/slider.cc
+++ b/ui/views/controls/slider.cc
@@ -27,7 +27,7 @@
#include "ui/views/widget/widget.h"
namespace {
-const int kSlideValueChangeDurationMS = 150;
+const int kSlideValueChangeDurationMs = 150;
// The image chunks.
enum BorderElements {
@@ -51,11 +51,22 @@ Slider* Slider::CreateSlider(bool is_material_design,
return new NonMdSlider(listener);
}
+Slider::~Slider() {
+}
+
+void Slider::SetValue(float value) {
+ SetValueInternal(value, VALUE_CHANGED_BY_API);
+}
+
+void Slider::SetAccessibleName(const base::string16& name) {
+ accessible_name_ = name;
+}
+
Slider::Slider(SliderListener* listener)
: listener_(listener),
value_(0.f),
keyboard_increment_(0.1f),
- animating_value_(0.f),
+ initial_animating_value_(0.f),
value_is_valid_(false),
accessibility_events_enabled_(true),
focus_border_color_(0),
@@ -68,11 +79,28 @@ Slider::Slider(SliderListener* listener)
#endif
}
-Slider::~Slider() {
+float Slider::GetAnimatingValue() const{
+ return move_animation_ && move_animation_->is_animating()
+ ? move_animation_->CurrentValueBetween(initial_animating_value_,
+ value_)
+ : value_;
}
-void Slider::SetValue(float value) {
- SetValueInternal(value, VALUE_CHANGED_BY_API);
+void Slider::SetHighlighted(bool is_highlighted) {}
+
+void Slider::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ OnPaintFocus(canvas);
+}
+
+void Slider::AnimationProgressed(const gfx::Animation* animation) {
+ if (animation == move_animation_.get())
+ SchedulePaint();
+}
+
+void Slider::AnimationEnded(const gfx::Animation* animation) {
+ if (animation == move_animation_.get())
+ move_animation_.reset();
}
void Slider::SetValueInternal(float value, SliderChangeReason reason) {
@@ -93,26 +121,24 @@ void Slider::SetValueInternal(float value, SliderChangeReason reason) {
if (old_value_valid && base::MessageLoop::current()) {
// Do not animate when setting the value of the slider for the first time.
// There is no message-loop when running tests. So we cannot animate then.
- animating_value_ = old_value;
- move_animation_.reset(new gfx::SlideAnimation(this));
- move_animation_->SetSlideDuration(kSlideValueChangeDurationMS);
- move_animation_->Show();
- AnimationProgressed(move_animation_.get());
+ if (!move_animation_) {
+ initial_animating_value_ = old_value;
+ move_animation_.reset(new gfx::SlideAnimation(this));
+ move_animation_->SetSlideDuration(kSlideValueChangeDurationMs);
+ move_animation_->Show();
+ }
} else {
SchedulePaint();
}
- if (accessibility_events_enabled_ && GetWidget()) {
- NotifyAccessibilityEvent(
- ui::AX_EVENT_VALUE_CHANGED, true);
- }
+ if (accessibility_events_enabled_ && GetWidget())
+ NotifyAccessibilityEvent(ui::AX_EVENT_VALUE_CHANGED, true);
}
void Slider::PrepareForMove(const int new_x) {
// Try to remember the position of the mouse cursor on the button.
gfx::Insets inset = GetInsets();
gfx::Rect content = GetContentsBounds();
- float value = move_animation_.get() && move_animation_->is_animating() ?
- animating_value_ : value_;
+ float value = GetAnimatingValue();
const int thumb_width = GetThumbWidth();
const int thumb_x = value * (content.width() - thumb_width);
@@ -137,10 +163,6 @@ void Slider::MoveButtonTo(const gfx::Point& point) {
VALUE_CHANGED_BY_USER);
}
-void Slider::SetAccessibleName(const base::string16& name) {
- accessible_name_ = name;
-}
-
void Slider::OnPaintFocus(gfx::Canvas* canvas) {
if (!HasFocus())
return;
@@ -154,6 +176,18 @@ void Slider::OnPaintFocus(gfx::Canvas* canvas) {
}
}
+void Slider::OnSliderDragStarted() {
+ SetHighlighted(true);
+ if (listener_)
+ listener_->SliderDragStarted(this);
+}
+
+void Slider::OnSliderDragEnded() {
+ SetHighlighted(false);
+ if (listener_)
+ listener_->SliderDragEnded(this);
+}
+
const char* Slider::GetClassName() const {
return kViewClassName;
}
@@ -165,17 +199,6 @@ gfx::Size Slider::GetPreferredSize() const {
return gfx::Size(std::max(width(), kSizeMajor), kSizeMinor);
}
-void Slider::OnPaint(gfx::Canvas* canvas) {
- View::OnPaint(canvas);
- OnPaintFocus(canvas);
-}
-
-float Slider::GetAnimatingValue() const{
- return move_animation_.get() && move_animation_->is_animating()
- ? animating_value_
- : value_;
-}
-
bool Slider::OnMousePressed(const ui::MouseEvent& event) {
if (!event.IsOnlyLeftMouseButton())
return false;
@@ -206,6 +229,13 @@ bool Slider::OnKeyPressed(const ui::KeyEvent& event) {
return true;
}
+void Slider::GetAccessibleState(ui::AXViewState* state) {
+ state->role = ui::AX_ROLE_SLIDER;
+ state->name = accessible_name_;
+ state->value = base::UTF8ToUTF16(
+ base::StringPrintf("%d%%", static_cast<int>(value_ * 100 + 0.5)));
+}
+
void Slider::OnFocus() {
View::OnFocus();
SchedulePaint();
@@ -240,26 +270,4 @@ void Slider::OnGestureEvent(ui::GestureEvent* event) {
}
}
-void Slider::AnimationProgressed(const gfx::Animation* animation) {
- animating_value_ = animation->CurrentValueBetween(animating_value_, value_);
- SchedulePaint();
-}
-
-void Slider::GetAccessibleState(ui::AXViewState* state) {
- state->role = ui::AX_ROLE_SLIDER;
- state->name = accessible_name_;
- state->value = base::UTF8ToUTF16(
- base::StringPrintf("%d%%", static_cast<int>(value_ * 100 + 0.5)));
-}
-
-void Slider::OnSliderDragStarted() {
- if (listener_)
- listener_->SliderDragStarted(this);
-}
-
-void Slider::OnSliderDragEnded() {
- if (listener_)
- listener_->SliderDragEnded(this);
-}
-
} // namespace views
« no previous file with comments | « ui/views/controls/slider.h ('k') | ui/views/test/test_slider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698