OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef UI_GFX_ANDROID_SCROLLER_H_ | 5 #ifndef UI_EVENTS_ANDROID_SCROLLER_H_ |
6 #define UI_GFX_ANDROID_SCROLLER_H_ | 6 #define UI_EVENTS_ANDROID_SCROLLER_H_ |
7 | 7 |
8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
9 #include "ui/gfx/gfx_export.h" | 9 #include "ui/events/events_base_export.h" |
| 10 #include "ui/events/gesture_curve.h" |
| 11 #include "ui/gfx/geometry/vector2d_f.h" |
10 | 12 |
11 namespace gfx { | 13 namespace ui { |
12 | 14 |
13 // Native port of android.widget.Scroller. | 15 // Native port of android.widget.Scroller. |
14 // * Change-Id: I4365946f890a76fcfa78ca9d69f2a8e0848095a9 | 16 // * Change-Id: I4365946f890a76fcfa78ca9d69f2a8e0848095a9 |
15 // * Please update the Change-Id as upstream Android changes are pulled. | 17 // * Please update the Change-Id as upstream Android changes are pulled. |
16 class GFX_EXPORT Scroller { | 18 class EVENTS_BASE_EXPORT Scroller : public GestureCurve { |
17 public: | 19 public: |
18 struct Config { | 20 struct Config { |
19 Config(); | 21 Config(); |
20 | 22 |
21 // Controls fling deceleration. Defaults to 0.015f. | 23 // Controls fling deceleration. Defaults to 0.015f. |
22 float fling_friction; | 24 float fling_friction; |
23 | 25 |
24 // Controls fling accumulation. Defaults to disabled. | 26 // Controls fling accumulation. Defaults to disabled. |
25 bool flywheel_enabled; | 27 bool flywheel_enabled; |
26 }; | 28 }; |
27 | 29 |
28 explicit Scroller(const Config& config); | 30 explicit Scroller(const Config& config); |
29 ~Scroller(); | 31 virtual ~Scroller(); |
| 32 |
| 33 // GestureCurve implementation. |
| 34 virtual bool ComputeScrollOffset(base::TimeTicks time, |
| 35 gfx::Vector2dF* offset, |
| 36 gfx::Vector2dF* velocity) override; |
30 | 37 |
31 // Start scrolling by providing a starting point and the distance to travel. | 38 // Start scrolling by providing a starting point and the distance to travel. |
32 // The default value of 250 milliseconds will be used for the duration. | 39 // The default value of 250 milliseconds will be used for the duration. |
33 void StartScroll(float start_x, | 40 void StartScroll(float start_x, |
34 float start_y, | 41 float start_y, |
35 float dx, | 42 float dx, |
36 float dy, | 43 float dy, |
37 base::TimeTicks start_time); | 44 base::TimeTicks start_time); |
38 | 45 |
39 // Start scrolling by providing a starting point, the distance to travel, | 46 // Start scrolling by providing a starting point, the distance to travel, |
(...skipping 10 matching lines...) Expand all Loading... |
50 void Fling(float start_x, | 57 void Fling(float start_x, |
51 float start_y, | 58 float start_y, |
52 float velocity_x, | 59 float velocity_x, |
53 float velocity_y, | 60 float velocity_y, |
54 float min_x, | 61 float min_x, |
55 float max_x, | 62 float max_x, |
56 float min_y, | 63 float min_y, |
57 float max_y, | 64 float max_y, |
58 base::TimeTicks start_time); | 65 base::TimeTicks start_time); |
59 | 66 |
60 // Call this when you want to know the new location. If it returns true, | |
61 // the animation is not yet finished. | |
62 bool ComputeScrollOffset(base::TimeTicks time); | |
63 | |
64 // Extend the scroll animation by |extend|. This allows a running animation | 67 // Extend the scroll animation by |extend|. This allows a running animation |
65 // to scroll further and longer when used with |SetFinalX()| or |SetFinalY()|. | 68 // to scroll further and longer when used with |SetFinalX()| or |SetFinalY()|. |
66 void ExtendDuration(base::TimeDelta extend); | 69 void ExtendDuration(base::TimeDelta extend); |
67 void SetFinalX(float new_x); | 70 void SetFinalX(float new_x); |
68 void SetFinalY(float new_y); | 71 void SetFinalY(float new_y); |
69 | 72 |
70 // Stops the animation. Contrary to |ForceFinished()|, aborting the animation | 73 // Stops the animation. Contrary to |ForceFinished()|, aborting the animation |
71 // causes the scroller to move to the final x and y position. | 74 // causes the scroller to move to the final x and y position. |
72 void AbortAnimation(); | 75 void AbortAnimation(); |
73 | 76 |
(...skipping 21 matching lines...) Expand all Loading... |
95 | 98 |
96 bool IsScrollingInDirection(float xvel, float yvel) const; | 99 bool IsScrollingInDirection(float xvel, float yvel) const; |
97 | 100 |
98 private: | 101 private: |
99 enum Mode { | 102 enum Mode { |
100 UNDEFINED, | 103 UNDEFINED, |
101 SCROLL_MODE, | 104 SCROLL_MODE, |
102 FLING_MODE, | 105 FLING_MODE, |
103 }; | 106 }; |
104 | 107 |
105 void OnDurationChanged(); | 108 bool ComputeScrollOffsetInternal(base::TimeTicks time); |
106 void RecomputeDeltas(); | 109 void RecomputeDeltas(); |
107 | 110 |
108 double GetSplineDeceleration(float velocity) const; | 111 double GetSplineDeceleration(float velocity) const; |
109 base::TimeDelta GetSplineFlingDuration(float velocity) const; | 112 base::TimeDelta GetSplineFlingDuration(float velocity) const; |
110 double GetSplineFlingDistance(float velocity) const; | 113 double GetSplineFlingDistance(float velocity) const; |
111 | 114 |
112 Mode mode_; | 115 Mode mode_; |
113 | 116 |
114 float start_x_; | 117 float start_x_; |
115 float start_y_; | 118 float start_y_; |
(...skipping 20 matching lines...) Expand all Loading... |
136 | 139 |
137 float velocity_; | 140 float velocity_; |
138 float curr_velocity_; | 141 float curr_velocity_; |
139 float distance_; | 142 float distance_; |
140 | 143 |
141 float fling_friction_; | 144 float fling_friction_; |
142 float deceleration_; | 145 float deceleration_; |
143 float tuning_coeff_; | 146 float tuning_coeff_; |
144 }; | 147 }; |
145 | 148 |
146 } // namespace gfx | 149 } // namespace ui |
147 | 150 |
148 #endif // UI_GFX_ANDROID_SCROLLER_H_ | 151 #endif // UI_EVENTS_ANDROID_SCROLLER_H_ |
OLD | NEW |