Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/renderer_host/input/synthetic_smooth_move_gesture.h" | 5 #include "content/browser/renderer_host/input/synthetic_smooth_move_gesture.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "ui/gfx/geometry/point_f.h" | 10 #include "ui/gfx/geometry/point_f.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 60 const base::TimeTicks& timestamp, | 60 const base::TimeTicks& timestamp, |
| 61 SyntheticGestureTarget* target) { | 61 SyntheticGestureTarget* target) { |
| 62 if (state_ == SETUP) { | 62 if (state_ == SETUP) { |
| 63 state_ = STARTED; | 63 state_ = STARTED; |
| 64 current_move_segment_ = -1; | 64 current_move_segment_ = -1; |
| 65 current_move_segment_stop_time_ = timestamp; | 65 current_move_segment_stop_time_ = timestamp; |
| 66 } | 66 } |
| 67 | 67 |
| 68 switch (params_.input_type) { | 68 switch (params_.input_type) { |
| 69 case SyntheticSmoothMoveGestureParams::TOUCH_INPUT: | 69 case SyntheticSmoothMoveGestureParams::TOUCH_INPUT: |
| 70 if (!synthetic_pointer_) | 70 if (!synthetic_pointer_driver_) |
| 71 synthetic_pointer_ = | 71 synthetic_pointer_driver_ = |
| 72 SyntheticPointer::Create(SyntheticGestureParams::TOUCH_INPUT); | 72 SyntheticPointerDriver::Create(SyntheticGestureParams::TOUCH_INPUT); |
| 73 ForwardTouchInputEvents(timestamp, target); | 73 ForwardTouchInputEvents(timestamp, target); |
| 74 break; | 74 break; |
| 75 case SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT: | 75 case SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT: |
| 76 if (!synthetic_pointer_) | 76 if (!synthetic_pointer_driver_) |
| 77 synthetic_pointer_ = | 77 synthetic_pointer_driver_ = |
| 78 SyntheticPointer::Create(SyntheticGestureParams::MOUSE_INPUT); | 78 SyntheticPointerDriver::Create(SyntheticGestureParams::MOUSE_INPUT); |
| 79 ForwardMouseClickInputEvents(timestamp, target); | 79 ForwardMouseClickInputEvents(timestamp, target); |
| 80 break; | 80 break; |
| 81 case SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT: | 81 case SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT: |
| 82 ForwardMouseWheelInputEvents(timestamp, target); | 82 ForwardMouseWheelInputEvents(timestamp, target); |
| 83 break; | 83 break; |
| 84 default: | 84 default: |
| 85 return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED; | 85 return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED; |
| 86 } | 86 } |
| 87 return (state_ == DONE) ? SyntheticGesture::GESTURE_FINISHED | 87 return (state_ == DONE) ? SyntheticGesture::GESTURE_FINISHED |
| 88 : SyntheticGesture::GESTURE_RUNNING; | 88 : SyntheticGesture::GESTURE_RUNNING; |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 205 state_ = DONE; | 205 state_ = DONE; |
| 206 break; | 206 break; |
| 207 } | 207 } |
| 208 ComputeNextMoveSegment(); | 208 ComputeNextMoveSegment(); |
| 209 PressPoint(target, event_timestamp); | 209 PressPoint(target, event_timestamp); |
| 210 state_ = MOVING; | 210 state_ = MOVING; |
| 211 break; | 211 break; |
| 212 case MOVING: { | 212 case MOVING: { |
| 213 base::TimeTicks event_timestamp = ClampTimestamp(timestamp); | 213 base::TimeTicks event_timestamp = ClampTimestamp(timestamp); |
| 214 gfx::Vector2dF delta = GetPositionDeltaAtTime(event_timestamp); | 214 gfx::Vector2dF delta = GetPositionDeltaAtTime(event_timestamp); |
| 215 MovePoint(target, delta, event_timestamp); | 215 MovePoint(target, delta, event_timestamp, -1); |
|
tdresser
2016/11/12 19:50:55
I don't think we should explicitly pass -1 here, w
lanwei
2016/11/14 04:20:54
Done.
| |
| 216 | 216 |
| 217 if (FinishedCurrentMoveSegment(event_timestamp)) { | 217 if (FinishedCurrentMoveSegment(event_timestamp)) { |
| 218 if (!IsLastMoveSegment()) { | 218 if (!IsLastMoveSegment()) { |
| 219 current_move_segment_start_position_ += | 219 current_move_segment_start_position_ += |
| 220 params_.distances[current_move_segment_]; | 220 params_.distances[current_move_segment_]; |
| 221 ComputeNextMoveSegment(); | 221 ComputeNextMoveSegment(); |
| 222 } else { | 222 } else { |
| 223 ReleasePoint(target, event_timestamp); | 223 ReleasePoint(target, event_timestamp, -1); |
| 224 state_ = DONE; | 224 state_ = DONE; |
| 225 } | 225 } |
| 226 } | 226 } |
| 227 } break; | 227 } break; |
| 228 case STOPPING: | 228 case STOPPING: |
| 229 NOTREACHED() | 229 NOTREACHED() |
| 230 << "State STOPPING invalid for synthetic drag using mouse input."; | 230 << "State STOPPING invalid for synthetic drag using mouse input."; |
| 231 case SETUP: | 231 case SETUP: |
| 232 NOTREACHED() | 232 NOTREACHED() |
| 233 << "State SETUP invalid for synthetic drag using mouse input."; | 233 << "State SETUP invalid for synthetic drag using mouse input."; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 249 mouse_wheel_event.y = current_move_segment_start_position_.y(); | 249 mouse_wheel_event.y = current_move_segment_start_position_.y(); |
| 250 | 250 |
| 251 mouse_wheel_event.timeStampSeconds = ConvertTimestampToSeconds(timestamp); | 251 mouse_wheel_event.timeStampSeconds = ConvertTimestampToSeconds(timestamp); |
| 252 | 252 |
| 253 target->DispatchInputEventToPlatform(mouse_wheel_event); | 253 target->DispatchInputEventToPlatform(mouse_wheel_event); |
| 254 } | 254 } |
| 255 | 255 |
| 256 void SyntheticSmoothMoveGesture::PressPoint(SyntheticGestureTarget* target, | 256 void SyntheticSmoothMoveGesture::PressPoint(SyntheticGestureTarget* target, |
| 257 const base::TimeTicks& timestamp) { | 257 const base::TimeTicks& timestamp) { |
| 258 DCHECK_EQ(current_move_segment_, 0); | 258 DCHECK_EQ(current_move_segment_, 0); |
| 259 synthetic_pointer_->Press(current_move_segment_start_position_.x(), | 259 synthetic_pointer_driver_->Press(current_move_segment_start_position_.x(), |
| 260 current_move_segment_start_position_.y(), target, | 260 current_move_segment_start_position_.y()); |
| 261 timestamp); | 261 synthetic_pointer_driver_->DispatchEvent(target, timestamp); |
| 262 synthetic_pointer_->DispatchEvent(target, timestamp); | |
| 263 } | 262 } |
| 264 | 263 |
| 265 void SyntheticSmoothMoveGesture::MovePoint(SyntheticGestureTarget* target, | 264 void SyntheticSmoothMoveGesture::MovePoint(SyntheticGestureTarget* target, |
| 266 const gfx::Vector2dF& delta, | 265 const gfx::Vector2dF& delta, |
| 267 const base::TimeTicks& timestamp) { | 266 const base::TimeTicks& timestamp, |
| 267 int index) { | |
| 268 DCHECK_GE(current_move_segment_, 0); | 268 DCHECK_GE(current_move_segment_, 0); |
| 269 DCHECK_LT(current_move_segment_, static_cast<int>(params_.distances.size())); | 269 DCHECK_LT(current_move_segment_, static_cast<int>(params_.distances.size())); |
| 270 gfx::PointF new_position = current_move_segment_start_position_ + delta; | 270 gfx::PointF new_position = current_move_segment_start_position_ + delta; |
| 271 synthetic_pointer_->Move(0, new_position.x(), new_position.y(), target, | 271 synthetic_pointer_driver_->Move(new_position.x(), new_position.y(), index); |
| 272 timestamp); | 272 synthetic_pointer_driver_->DispatchEvent(target, timestamp); |
| 273 synthetic_pointer_->DispatchEvent(target, timestamp); | |
| 274 } | 273 } |
| 275 | 274 |
| 276 void SyntheticSmoothMoveGesture::ReleasePoint( | 275 void SyntheticSmoothMoveGesture::ReleasePoint(SyntheticGestureTarget* target, |
| 277 SyntheticGestureTarget* target, | 276 const base::TimeTicks& timestamp, |
| 278 const base::TimeTicks& timestamp) { | 277 int index) { |
| 279 DCHECK_EQ(current_move_segment_, | 278 DCHECK_EQ(current_move_segment_, |
| 280 static_cast<int>(params_.distances.size()) - 1); | 279 static_cast<int>(params_.distances.size()) - 1); |
| 281 gfx::PointF position; | 280 gfx::PointF position; |
| 282 if (params_.input_type == | 281 if (params_.input_type == |
| 283 SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT) { | 282 SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT) { |
| 284 position = current_move_segment_start_position_ + | 283 position = current_move_segment_start_position_ + |
| 285 GetPositionDeltaAtTime(timestamp); | 284 GetPositionDeltaAtTime(timestamp); |
| 286 } | 285 } |
| 287 synthetic_pointer_->Release(0, target, timestamp); | 286 synthetic_pointer_driver_->Release(index); |
| 288 synthetic_pointer_->DispatchEvent(target, timestamp); | 287 synthetic_pointer_driver_->DispatchEvent(target, timestamp); |
| 289 } | 288 } |
| 290 | 289 |
| 291 void SyntheticSmoothMoveGesture::AddTouchSlopToFirstDistance( | 290 void SyntheticSmoothMoveGesture::AddTouchSlopToFirstDistance( |
| 292 SyntheticGestureTarget* target) { | 291 SyntheticGestureTarget* target) { |
| 293 DCHECK_GE(params_.distances.size(), 1ul); | 292 DCHECK_GE(params_.distances.size(), 1ul); |
| 294 gfx::Vector2dF& first_move_distance = params_.distances[0]; | 293 gfx::Vector2dF& first_move_distance = params_.distances[0]; |
| 295 DCHECK_GT(first_move_distance.Length(), 0); | 294 DCHECK_GT(first_move_distance.Length(), 0); |
| 296 first_move_distance += CeilFromZero(ProjectScalarOntoVector( | 295 first_move_distance += CeilFromZero(ProjectScalarOntoVector( |
| 297 target->GetTouchSlopInDips(), first_move_distance)); | 296 target->GetTouchSlopInDips(), first_move_distance)); |
| 298 } | 297 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 DCHECK_LT(current_move_segment_, static_cast<int>(params_.distances.size())); | 337 DCHECK_LT(current_move_segment_, static_cast<int>(params_.distances.size())); |
| 339 return current_move_segment_ == | 338 return current_move_segment_ == |
| 340 static_cast<int>(params_.distances.size()) - 1; | 339 static_cast<int>(params_.distances.size()) - 1; |
| 341 } | 340 } |
| 342 | 341 |
| 343 bool SyntheticSmoothMoveGesture::MoveIsNoOp() const { | 342 bool SyntheticSmoothMoveGesture::MoveIsNoOp() const { |
| 344 return params_.distances.size() == 0 || params_.distances[0].IsZero(); | 343 return params_.distances.size() == 0 || params_.distances[0].IsZero(); |
| 345 } | 344 } |
| 346 | 345 |
| 347 } // namespace content | 346 } // namespace content |
| OLD | NEW |