| 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
|
|
|