Chromium Code Reviews| 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 |