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

Unified Diff: content/browser/renderer_host/input/input_router_impl.cc

Issue 2624783002: Fix movementX/Y attributes for touch pointer events (Closed)
Patch Set: Wrap ForwardTouchEventWithLatencyInfo to always reset points Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/input_router_impl.cc
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc
index 1dc0f2ccd07bfd3a03d0e7b821edf4bd3e263b45..86ed1c67e136274a0a94f783507a5b1ce3db29f4 100644
--- a/content/browser/renderer_host/input/input_router_impl.cc
+++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -186,8 +186,10 @@ void InputRouterImpl::SendGestureEvent(
void InputRouterImpl::SendTouchEvent(
const TouchEventWithLatencyInfo& touch_event) {
- input_stream_validator_.Validate(touch_event.event);
- touch_event_queue_->QueueEvent(touch_event);
+ TouchEventWithLatencyInfo updatd_touch_event = touch_event;
+ SetMovementXYForTouchPoints(&updatd_touch_event.event);
+ input_stream_validator_.Validate(updatd_touch_event.event);
+ touch_event_queue_->QueueEvent(updatd_touch_event);
}
// Forwards MouseEvent without passing it through
@@ -638,4 +640,31 @@ void InputRouterImpl::SetFrameTreeNodeId(int frameTreeNodeId) {
frame_tree_node_id_ = frameTreeNodeId;
}
+void InputRouterImpl::SetMovementXYForTouchPoints(blink::WebTouchEvent* event) {
+ for (size_t i = 0; i < event->touchesLength; ++i) {
+ blink::WebTouchPoint* touch_point = &event->touches[i];
+ if (touch_point->state == blink::WebTouchPoint::StateMoved) {
+ const gfx::Point& last_position = global_touch_position_[touch_point->id];
+ touch_point->movementX =
+ touch_point->screenPosition.x - last_position.x();
+ touch_point->movementY =
+ touch_point->screenPosition.y - last_position.y();
+ global_touch_position_[touch_point->id].SetPoint(
+ touch_point->screenPosition.x, touch_point->screenPosition.y);
+ } else {
+ touch_point->movementX = 0;
+ touch_point->movementY = 0;
+ if (touch_point->state == blink::WebTouchPoint::StateReleased ||
+ touch_point->state == blink::WebTouchPoint::StateCancelled) {
+ global_touch_position_.erase(touch_point->id);
+ } else if (touch_point->state == blink::WebTouchPoint::StatePressed) {
+ DCHECK(global_touch_position_.find(touch_point->id) ==
+ global_touch_position_.end());
+ global_touch_position_[touch_point->id] = gfx::Point(
+ touch_point->screenPosition.x, touch_point->screenPosition.y);
+ }
+ }
+ }
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698