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 #include "ui/events/blink/input_scroll_elasticity_controller.h" | 5 #include "ui/events/blink/input_scroll_elasticity_controller.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
107 } | 107 } |
108 | 108 |
109 void InputScrollElasticityController::ObserveWheelEventAndResult( | 109 void InputScrollElasticityController::ObserveWheelEventAndResult( |
110 const blink::WebMouseWheelEvent& wheel_event, | 110 const blink::WebMouseWheelEvent& wheel_event, |
111 const cc::InputHandlerScrollResult& scroll_result) { | 111 const cc::InputHandlerScrollResult& scroll_result) { |
112 // We should only get PhaseMayBegin or PhaseBegan events while in the | 112 // We should only get PhaseMayBegin or PhaseBegan events while in the |
113 // Inactive or MomentumAnimated states, but in case we get bad input (e.g, | 113 // Inactive or MomentumAnimated states, but in case we get bad input (e.g, |
114 // abbreviated by tab-switch), always re-set the state to ActiveScrolling | 114 // abbreviated by tab-switch), always re-set the state to ActiveScrolling |
115 // when those events are received. | 115 // when those events are received. |
116 if (wheel_event.phase == blink::WebMouseWheelEvent::PhaseMayBegin || | 116 if (wheel_event.phase == blink::WebMouseWheelEvent::PhaseMayBegin || |
117 wheel_event.phase == blink::WebMouseWheelEvent::PhaseBegan) { | 117 wheel_event.phase == blink::WebMouseWheelEvent::PhaseBegan) { |
tdresser
2016/03/02 18:26:53
This change will regress this behavior, because we
dtapuska
2016/03/07 18:03:59
There will always be a scroll begin, update, end.
| |
118 scroll_velocity = gfx::Vector2dF(); | 118 scroll_velocity = gfx::Vector2dF(); |
119 last_scroll_event_timestamp_ = base::TimeTicks(); | 119 last_scroll_event_timestamp_ = base::TimeTicks(); |
120 state_ = kStateActiveScroll; | 120 state_ = kStateActiveScroll; |
121 pending_overscroll_delta_ = gfx::Vector2dF(); | 121 pending_overscroll_delta_ = gfx::Vector2dF(); |
122 return; | 122 return; |
123 } | 123 } |
124 | 124 |
125 gfx::Vector2dF event_delta(-wheel_event.deltaX, -wheel_event.deltaY); | 125 gfx::Vector2dF event_delta(-wheel_event.deltaX, -wheel_event.deltaY); |
126 base::TimeTicks event_timestamp = | 126 base::TimeTicks event_timestamp = |
127 base::TimeTicks() + | 127 base::TimeTicks() + |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 blink::WebMouseWheelEvent::PhaseEnded) { | 160 blink::WebMouseWheelEvent::PhaseEnded) { |
161 EnterStateInactive(); | 161 EnterStateInactive(); |
162 } | 162 } |
163 case kStateMomentumAnimated: | 163 case kStateMomentumAnimated: |
164 // The PhaseMayBegin and PhaseBegan cases are handled at the top of the | 164 // The PhaseMayBegin and PhaseBegan cases are handled at the top of the |
165 // function. | 165 // function. |
166 break; | 166 break; |
167 } | 167 } |
168 } | 168 } |
169 | 169 |
170 void InputScrollElasticityController::ObserveGestureEventAndResult( | |
171 const blink::WebGestureEvent& gesture_event, | |
172 const cc::InputHandlerScrollResult& scroll_result) { | |
173 base::TimeTicks event_timestamp = | |
174 base::TimeTicks() + | |
175 base::TimeDelta::FromSecondsD(gesture_event.timeStampSeconds); | |
176 | |
177 switch (gesture_event.type) { | |
178 case blink::WebInputEvent::GestureScrollBegin: { | |
179 if (gesture_event.data.scrollBegin.inertial) { | |
180 if (state_ == kStateInactive) | |
181 state_ = kStateMomentumScroll; | |
182 } else { | |
183 scroll_velocity = gfx::Vector2dF(); | |
184 last_scroll_event_timestamp_ = base::TimeTicks(); | |
185 state_ = kStateActiveScroll; | |
186 pending_overscroll_delta_ = gfx::Vector2dF(); | |
187 } | |
188 break; | |
189 } | |
190 case blink::WebInputEvent::GestureScrollEnd: { | |
191 switch (state_) { | |
192 case kStateMomentumAnimated: | |
193 case kStateInactive: | |
194 break; | |
195 case kStateActiveScroll: | |
196 case kStateMomentumScroll: | |
197 if (helper_->StretchAmount().IsZero()) { | |
198 EnterStateInactive(); | |
199 } else { | |
200 EnterStateMomentumAnimated(event_timestamp); | |
201 } | |
202 break; | |
203 } | |
204 break; | |
205 } | |
206 case blink::WebInputEvent::GestureScrollUpdate: { | |
207 gfx::Vector2dF event_delta(-gesture_event.data.scrollUpdate.deltaX, | |
208 -gesture_event.data.scrollUpdate.deltaY); | |
209 switch (state_) { | |
210 case kStateMomentumAnimated: | |
211 case kStateInactive: | |
212 break; | |
213 case kStateActiveScroll: | |
214 case kStateMomentumScroll: | |
215 UpdateVelocity(event_delta, event_timestamp); | |
216 Overscroll(event_delta, scroll_result.unused_scroll_delta); | |
217 if (gesture_event.data.scrollUpdate.inertial && | |
218 !helper_->StretchAmount().IsZero()) { | |
219 EnterStateMomentumAnimated(event_timestamp); | |
220 } | |
221 break; | |
222 } | |
223 break; | |
224 } | |
225 default: | |
226 break; | |
227 } | |
228 } | |
229 | |
170 void InputScrollElasticityController::UpdateVelocity( | 230 void InputScrollElasticityController::UpdateVelocity( |
171 const gfx::Vector2dF& event_delta, | 231 const gfx::Vector2dF& event_delta, |
172 const base::TimeTicks& event_timestamp) { | 232 const base::TimeTicks& event_timestamp) { |
173 float time_delta = | 233 float time_delta = |
174 (event_timestamp - last_scroll_event_timestamp_).InSecondsF(); | 234 (event_timestamp - last_scroll_event_timestamp_).InSecondsF(); |
175 if (time_delta < kScrollVelocityZeroingTimeout && time_delta > 0) { | 235 if (time_delta < kScrollVelocityZeroingTimeout && time_delta > 0) { |
176 scroll_velocity = gfx::Vector2dF(event_delta.x() / time_delta, | 236 scroll_velocity = gfx::Vector2dF(event_delta.x() / time_delta, |
177 event_delta.y() / time_delta); | 237 event_delta.y() / time_delta); |
178 } else { | 238 } else { |
179 scroll_velocity = gfx::Vector2dF(); | 239 scroll_velocity = gfx::Vector2dF(); |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
409 break; | 469 break; |
410 default: | 470 default: |
411 // These cases should not be hit because the stretch must be zero in the | 471 // These cases should not be hit because the stretch must be zero in the |
412 // Inactive and MomentumScroll states. | 472 // Inactive and MomentumScroll states. |
413 NOTREACHED(); | 473 NOTREACHED(); |
414 break; | 474 break; |
415 } | 475 } |
416 } | 476 } |
417 | 477 |
418 } // namespace ui | 478 } // namespace ui |
OLD | NEW |