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

Side by Side Diff: content/browser/renderer_host/input/mouse_wheel_event_queue.cc

Issue 1716283002: Fix x/y position of gesture scroll events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_wheel_regression
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/mouse_wheel_event_queue.h" 5 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h"
6 6
7 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 10
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 78
79 event_sent_for_gesture_ack_->latency.AddNewLatencyFrom(latency_info); 79 event_sent_for_gesture_ack_->latency.AddNewLatencyFrom(latency_info);
80 client_->OnMouseWheelEventAck(*event_sent_for_gesture_ack_, ack_result); 80 client_->OnMouseWheelEventAck(*event_sent_for_gesture_ack_, ack_result);
81 81
82 // If event wasn't consumed then generate a gesture scroll for it. 82 // If event wasn't consumed then generate a gesture scroll for it.
83 if (send_gestures_ && ack_result != INPUT_EVENT_ACK_STATE_CONSUMED && 83 if (send_gestures_ && ack_result != INPUT_EVENT_ACK_STATE_CONSUMED &&
84 event_sent_for_gesture_ack_->event.canScroll && 84 event_sent_for_gesture_ack_->event.canScroll &&
85 (scrolling_device_ == blink::WebGestureDeviceUninitialized || 85 (scrolling_device_ == blink::WebGestureDeviceUninitialized ||
86 scrolling_device_ == blink::WebGestureDeviceTouchpad)) { 86 scrolling_device_ == blink::WebGestureDeviceTouchpad)) {
87 GestureEventWithLatencyInfo scroll_update; 87 GestureEventWithLatencyInfo scroll_update;
88 scroll_update.event.x = event_sent_for_gesture_ack_->event.x;
89 scroll_update.event.y = event_sent_for_gesture_ack_->event.y;
90 scroll_update.event.globalX = event_sent_for_gesture_ack_->event.globalX;
91 scroll_update.event.globalY = event_sent_for_gesture_ack_->event.globalY;
88 scroll_update.event.type = WebInputEvent::GestureScrollUpdate; 92 scroll_update.event.type = WebInputEvent::GestureScrollUpdate;
89 scroll_update.event.sourceDevice = blink::WebGestureDeviceTouchpad; 93 scroll_update.event.sourceDevice = blink::WebGestureDeviceTouchpad;
90 scroll_update.event.resendingPluginId = -1; 94 scroll_update.event.resendingPluginId = -1;
91 scroll_update.event.data.scrollUpdate.deltaX = 95 scroll_update.event.data.scrollUpdate.deltaX =
92 event_sent_for_gesture_ack_->event.deltaX; 96 event_sent_for_gesture_ack_->event.deltaX;
93 scroll_update.event.data.scrollUpdate.deltaY = 97 scroll_update.event.data.scrollUpdate.deltaY =
94 event_sent_for_gesture_ack_->event.deltaY; 98 event_sent_for_gesture_ack_->event.deltaY;
95 if (event_sent_for_gesture_ack_->event.scrollByPage) { 99 if (event_sent_for_gesture_ack_->event.scrollByPage) {
96 scroll_update.event.data.scrollUpdate.deltaUnits = 100 scroll_update.event.data.scrollUpdate.deltaUnits =
97 blink::WebGestureEvent::Page; 101 blink::WebGestureEvent::Page;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 event_sent_for_gesture_ack_.reset(wheel_queue_.front()); 151 event_sent_for_gesture_ack_.reset(wheel_queue_.front());
148 wheel_queue_.pop_front(); 152 wheel_queue_.pop_front();
149 153
150 MouseWheelEventWithLatencyInfo send_event(*event_sent_for_gesture_ack_); 154 MouseWheelEventWithLatencyInfo send_event(*event_sent_for_gesture_ack_);
151 if (send_gestures_) 155 if (send_gestures_)
152 send_event.event.canScroll = false; 156 send_event.event.canScroll = false;
153 157
154 client_->SendMouseWheelEventImmediately(send_event); 158 client_->SendMouseWheelEventImmediately(send_event);
155 } 159 }
156 160
157 void MouseWheelEventQueue::SendScrollEnd( 161 void MouseWheelEventQueue::SendScrollEnd(blink::WebGestureEvent update_event) {
158 blink::WebGestureEvent::ScrollUnits units) {
159 GestureEventWithLatencyInfo scroll_end; 162 GestureEventWithLatencyInfo scroll_end;
160 scroll_end.event.type = WebInputEvent::GestureScrollEnd; 163 scroll_end.event.type = WebInputEvent::GestureScrollEnd;
161 scroll_end.event.sourceDevice = blink::WebGestureDeviceTouchpad; 164 scroll_end.event.sourceDevice = blink::WebGestureDeviceTouchpad;
162 scroll_end.event.resendingPluginId = -1; 165 scroll_end.event.resendingPluginId = -1;
163 scroll_end.event.data.scrollEnd.deltaUnits = units; 166 scroll_end.event.data.scrollEnd.deltaUnits =
167 update_event.data.scrollUpdate.deltaUnits;
168 scroll_end.event.x = update_event.x;
169 scroll_end.event.y = update_event.y;
170 scroll_end.event.globalX = update_event.globalX;
171 scroll_end.event.globalY = update_event.globalY;
172
164 SendGesture(scroll_end); 173 SendGesture(scroll_end);
165 } 174 }
166 175
167 void MouseWheelEventQueue::SendGesture( 176 void MouseWheelEventQueue::SendGesture(
168 const GestureEventWithLatencyInfo& gesture) { 177 const GestureEventWithLatencyInfo& gesture) {
169 switch (gesture.event.type) { 178 switch (gesture.event.type) {
170 case WebInputEvent::GestureScrollUpdate: 179 case WebInputEvent::GestureScrollUpdate:
171 if (needs_scroll_begin_) { 180 if (needs_scroll_begin_) {
172 GestureEventWithLatencyInfo scroll_begin(gesture); 181 GestureEventWithLatencyInfo scroll_begin(gesture);
182 scroll_begin.event.x = gesture.event.x;
183 scroll_begin.event.y = gesture.event.y;
184 scroll_begin.event.globalX = gesture.event.globalX;
185 scroll_begin.event.globalY = gesture.event.globalY;
173 scroll_begin.event.type = WebInputEvent::GestureScrollBegin; 186 scroll_begin.event.type = WebInputEvent::GestureScrollBegin;
174 scroll_begin.event.data.scrollBegin.deltaXHint = 187 scroll_begin.event.data.scrollBegin.deltaXHint =
175 gesture.event.data.scrollUpdate.deltaX; 188 gesture.event.data.scrollUpdate.deltaX;
176 scroll_begin.event.data.scrollBegin.deltaYHint = 189 scroll_begin.event.data.scrollBegin.deltaYHint =
177 gesture.event.data.scrollUpdate.deltaY; 190 gesture.event.data.scrollUpdate.deltaY;
178 scroll_begin.event.data.scrollBegin.targetViewport = false; 191 scroll_begin.event.data.scrollBegin.targetViewport = false;
179 scroll_begin.event.data.scrollBegin.deltaHintUnits = 192 scroll_begin.event.data.scrollBegin.deltaHintUnits =
180 gesture.event.data.scrollUpdate.deltaUnits; 193 gesture.event.data.scrollUpdate.deltaUnits;
181 194
182 SendGesture(scroll_begin); 195 SendGesture(scroll_begin);
183 } 196 }
184 if (scroll_end_timer_.IsRunning()) { 197 if (scroll_end_timer_.IsRunning()) {
185 scroll_end_timer_.Reset(); 198 scroll_end_timer_.Reset();
186 } else { 199 } else {
187 scroll_end_timer_.Start( 200 scroll_end_timer_.Start(
188 FROM_HERE, 201 FROM_HERE,
189 base::TimeDelta::FromMilliseconds(scroll_transaction_ms_), 202 base::TimeDelta::FromMilliseconds(scroll_transaction_ms_),
190 base::Bind(&MouseWheelEventQueue::SendScrollEnd, 203 base::Bind(&MouseWheelEventQueue::SendScrollEnd,
191 base::Unretained(this), 204 base::Unretained(this), gesture.event));
192 gesture.event.data.scrollUpdate.deltaUnits));
193 } 205 }
194 break; 206 break;
195 case WebInputEvent::GestureScrollEnd: 207 case WebInputEvent::GestureScrollEnd:
196 needs_scroll_begin_ = true; 208 needs_scroll_begin_ = true;
197 break; 209 break;
198 case WebInputEvent::GestureScrollBegin: 210 case WebInputEvent::GestureScrollBegin:
199 needs_scroll_begin_ = false; 211 needs_scroll_begin_ = false;
200 break; 212 break;
201 default: 213 default:
202 return; 214 return;
203 } 215 }
204 client_->SendGestureEvent(gesture); 216 client_->SendGestureEvent(gesture);
205 } 217 }
206 218
207 } // namespace content 219 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698