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

Side by Side Diff: ui/events/blink/input_scroll_elasticity_controller.cc

Issue 1749343004: Implement Wheel Gesture Scrolling on OSX. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix non mac builds Created 4 years, 9 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
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698