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

Side by Side Diff: ui/gfx/android/scroller.h

Issue 634373003: Consolidate content fling implementations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix win build Created 6 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 unified diff | Download patch
« no previous file with comments | « ui/gfx/BUILD.gn ('k') | ui/gfx/android/scroller.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef UI_GFX_ANDROID_SCROLLER_H_
6 #define UI_GFX_ANDROID_SCROLLER_H_
7
8 #include "base/time/time.h"
9 #include "ui/gfx/gfx_export.h"
10
11 namespace gfx {
12
13 // Native port of android.widget.Scroller.
14 // * Change-Id: I4365946f890a76fcfa78ca9d69f2a8e0848095a9
15 // * Please update the Change-Id as upstream Android changes are pulled.
16 class GFX_EXPORT Scroller {
17 public:
18 struct Config {
19 Config();
20
21 // Controls fling deceleration. Defaults to 0.015f.
22 float fling_friction;
23
24 // Controls fling accumulation. Defaults to disabled.
25 bool flywheel_enabled;
26 };
27
28 explicit Scroller(const Config& config);
29 ~Scroller();
30
31 // 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.
33 void StartScroll(float start_x,
34 float start_y,
35 float dx,
36 float dy,
37 base::TimeTicks start_time);
38
39 // Start scrolling by providing a starting point, the distance to travel,
40 // and the duration of the scroll.
41 void StartScroll(float start_x,
42 float start_y,
43 float dx,
44 float dy,
45 base::TimeTicks start_time,
46 base::TimeDelta duration);
47
48 // Start scrolling based on a fling gesture. The distance travelled will
49 // depend on the initial velocity of the fling.
50 void Fling(float start_x,
51 float start_y,
52 float velocity_x,
53 float velocity_y,
54 float min_x,
55 float max_x,
56 float min_y,
57 float max_y,
58 base::TimeTicks start_time);
59
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
65 // to scroll further and longer when used with |SetFinalX()| or |SetFinalY()|.
66 void ExtendDuration(base::TimeDelta extend);
67 void SetFinalX(float new_x);
68 void SetFinalY(float new_y);
69
70 // Stops the animation. Contrary to |ForceFinished()|, aborting the animation
71 // causes the scroller to move to the final x and y position.
72 void AbortAnimation();
73
74 // Terminate the scroll without affecting the current x and y positions.
75 void ForceFinished(bool finished);
76
77 // Returns whether the scroller has finished scrolling.
78 bool IsFinished() const;
79
80 // Returns the time elapsed since the beginning of the scrolling.
81 base::TimeDelta GetTimePassed() const;
82
83 // Returns how long the scroll event will take.
84 base::TimeDelta GetDuration() const;
85
86 float GetStartX() const;
87 float GetStartY() const;
88 float GetCurrX() const;
89 float GetCurrY() const;
90 float GetCurrVelocity() const;
91 float GetCurrVelocityX() const;
92 float GetCurrVelocityY() const;
93 float GetFinalX() const;
94 float GetFinalY() const;
95
96 bool IsScrollingInDirection(float xvel, float yvel) const;
97
98 private:
99 enum Mode {
100 UNDEFINED,
101 SCROLL_MODE,
102 FLING_MODE,
103 };
104
105 void OnDurationChanged();
106 void RecomputeDeltas();
107
108 double GetSplineDeceleration(float velocity) const;
109 base::TimeDelta GetSplineFlingDuration(float velocity) const;
110 double GetSplineFlingDistance(float velocity) const;
111
112 Mode mode_;
113
114 float start_x_;
115 float start_y_;
116 float final_x_;
117 float final_y_;
118
119 float min_x_;
120 float max_x_;
121 float min_y_;
122 float max_y_;
123
124 float curr_x_;
125 float curr_y_;
126 base::TimeTicks start_time_;
127 base::TimeTicks curr_time_;
128 base::TimeDelta duration_;
129 double duration_seconds_reciprocal_;
130 float delta_x_;
131 float delta_x_norm_;
132 float delta_y_;
133 float delta_y_norm_;
134 bool finished_;
135 bool flywheel_enabled_;
136
137 float velocity_;
138 float curr_velocity_;
139 float distance_;
140
141 float fling_friction_;
142 float deceleration_;
143 float tuning_coeff_;
144 };
145
146 } // namespace gfx
147
148 #endif // UI_GFX_ANDROID_SCROLLER_H_
OLDNEW
« no previous file with comments | « ui/gfx/BUILD.gn ('k') | ui/gfx/android/scroller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698