Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / ui / views / controls / slider.h
blob33a760bfd660a97079a9300383ce297e92bb0227
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef UI_VIEWS_CONTROLS_SLIDER_H_
6 #define UI_VIEWS_CONTROLS_SLIDER_H_
8 #include "ui/gfx/animation/animation_delegate.h"
9 #include "ui/views/view.h"
10 #include "ui/views/views_export.h"
12 typedef unsigned int SkColor;
14 namespace gfx {
15 class ImageSkia;
16 class SlideAnimation;
19 namespace views {
21 namespace test {
22 class SliderTestApi;
25 class Slider;
27 enum SliderChangeReason {
28 VALUE_CHANGED_BY_USER, // value was changed by the user (by clicking, e.g.)
29 VALUE_CHANGED_BY_API, // value was changed by a call to SetValue.
32 class VIEWS_EXPORT SliderListener {
33 public:
34 virtual void SliderValueChanged(Slider* sender,
35 float value,
36 float old_value,
37 SliderChangeReason reason) = 0;
39 // Invoked when a drag starts or ends (more specifically, when the mouse
40 // button is pressed or released).
41 virtual void SliderDragStarted(Slider* sender) {}
42 virtual void SliderDragEnded(Slider* sender) {}
44 protected:
45 virtual ~SliderListener() {}
48 class VIEWS_EXPORT Slider : public View, public gfx::AnimationDelegate {
49 public:
50 enum Orientation {
51 HORIZONTAL,
52 VERTICAL
55 Slider(SliderListener* listener, Orientation orientation);
56 virtual ~Slider();
58 float value() const { return value_; }
59 void SetValue(float value);
61 // Set the delta used for changing the value via keyboard.
62 void SetKeyboardIncrement(float increment);
64 void SetAccessibleName(const base::string16& name);
66 void set_enable_accessibility_events(bool enabled) {
67 accessibility_events_enabled_ = enabled;
70 void set_focus_border_color(SkColor color) { focus_border_color_ = color; }
72 // Update UI based on control on/off state.
73 void UpdateState(bool control_on);
75 private:
76 friend class test::SliderTestApi;
78 void SetValueInternal(float value, SliderChangeReason reason);
80 // Should be called on the Mouse Down event. Used to calculate relative
81 // position of the mouse cursor (or the touch point) on the button to
82 // accurately move the button using the MoveButtonTo() method.
83 void PrepareForMove(const gfx::Point& point);
85 // Moves the button to the specified point and updates the value accordingly.
86 void MoveButtonTo(const gfx::Point& point);
88 void OnPaintFocus(gfx::Canvas* canvas);
90 // Notify the listener_, if not NULL, that dragging started.
91 void OnSliderDragStarted();
93 // Notify the listener_, if not NULL, that dragging ended.
94 void OnSliderDragEnded();
96 // views::View overrides:
97 virtual gfx::Size GetPreferredSize() const OVERRIDE;
98 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
99 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
100 virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
101 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
102 virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
103 virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
104 virtual void OnFocus() OVERRIDE;
105 virtual void OnBlur() OVERRIDE;
107 // ui::EventHandler overrides:
108 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
110 // gfx::AnimationDelegate overrides:
111 virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
113 void set_listener(SliderListener* listener) {
114 listener_ = listener;
117 SliderListener* listener_;
118 Orientation orientation_;
120 scoped_ptr<gfx::SlideAnimation> move_animation_;
122 float value_;
123 float keyboard_increment_;
124 float animating_value_;
125 bool value_is_valid_;
126 base::string16 accessible_name_;
127 bool accessibility_events_enabled_;
128 SkColor focus_border_color_;
130 // Relative position of the mouse cursor (or the touch point) on the slider's
131 // button.
132 gfx::Point initial_button_offset_;
134 const int* bar_active_images_;
135 const int* bar_disabled_images_;
136 const gfx::ImageSkia* thumb_;
137 const gfx::ImageSkia* images_[4];
138 int bar_height_;
140 DISALLOW_COPY_AND_ASSIGN(Slider);
143 } // namespace views
145 #endif // UI_VIEWS_CONTROLS_SLIDER_H_