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

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

Issue 1710033002: Add scrollDelta units to GestureScrollEnd. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_wheel_passive_listeners_3
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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 TryForwardNextEventToRenderer(); 117 TryForwardNextEventToRenderer();
118 } 118 }
119 119
120 void MouseWheelEventQueue::OnGestureScrollEvent( 120 void MouseWheelEventQueue::OnGestureScrollEvent(
121 const GestureEventWithLatencyInfo& gesture_event) { 121 const GestureEventWithLatencyInfo& gesture_event) {
122 if (gesture_event.event.type == blink::WebInputEvent::GestureScrollBegin) { 122 if (gesture_event.event.type == blink::WebInputEvent::GestureScrollBegin) {
123 // If there is a current scroll going on and a new scroll that isn't 123 // If there is a current scroll going on and a new scroll that isn't
124 // wheel based cancel current one by sending a ScrollEnd. 124 // wheel based cancel current one by sending a ScrollEnd.
125 if (scroll_end_timer_.IsRunning() && 125 if (scroll_end_timer_.IsRunning() &&
126 gesture_event.event.sourceDevice != blink::WebGestureDeviceTouchpad) { 126 gesture_event.event.sourceDevice != blink::WebGestureDeviceTouchpad) {
127 base::Closure task = scroll_end_timer_.user_task();
127 scroll_end_timer_.Reset(); 128 scroll_end_timer_.Reset();
128 SendScrollEnd(); 129 task.Run();
129 } 130 }
130 scrolling_device_ = gesture_event.event.sourceDevice; 131 scrolling_device_ = gesture_event.event.sourceDevice;
131 } else if (scrolling_device_ == gesture_event.event.sourceDevice && 132 } else if (scrolling_device_ == gesture_event.event.sourceDevice &&
132 (gesture_event.event.type == 133 (gesture_event.event.type ==
133 blink::WebInputEvent::GestureScrollEnd || 134 blink::WebInputEvent::GestureScrollEnd ||
134 gesture_event.event.type == 135 gesture_event.event.type ==
135 blink::WebInputEvent::GestureFlingStart)) { 136 blink::WebInputEvent::GestureFlingStart)) {
136 scrolling_device_ = blink::WebGestureDeviceUninitialized; 137 scrolling_device_ = blink::WebGestureDeviceUninitialized;
137 } 138 }
138 } 139 }
139 140
140 void MouseWheelEventQueue::TryForwardNextEventToRenderer() { 141 void MouseWheelEventQueue::TryForwardNextEventToRenderer() {
141 TRACE_EVENT0("input", "MouseWheelEventQueue::TryForwardNextEventToRenderer"); 142 TRACE_EVENT0("input", "MouseWheelEventQueue::TryForwardNextEventToRenderer");
142 143
143 if (wheel_queue_.empty() || event_sent_for_gesture_ack_) 144 if (wheel_queue_.empty() || event_sent_for_gesture_ack_)
144 return; 145 return;
145 146
146 event_sent_for_gesture_ack_.reset(wheel_queue_.front()); 147 event_sent_for_gesture_ack_.reset(wheel_queue_.front());
147 wheel_queue_.pop_front(); 148 wheel_queue_.pop_front();
148 149
149 MouseWheelEventWithLatencyInfo send_event(*event_sent_for_gesture_ack_); 150 MouseWheelEventWithLatencyInfo send_event(*event_sent_for_gesture_ack_);
150 if (send_gestures_) 151 if (send_gestures_)
151 send_event.event.canScroll = false; 152 send_event.event.canScroll = false;
152 153
153 client_->SendMouseWheelEventImmediately(send_event); 154 client_->SendMouseWheelEventImmediately(send_event);
154 } 155 }
155 156
156 void MouseWheelEventQueue::SendScrollEnd() { 157 void MouseWheelEventQueue::SendScrollEnd(
158 blink::WebGestureEvent::ScrollUnits units) {
157 GestureEventWithLatencyInfo scroll_end; 159 GestureEventWithLatencyInfo scroll_end;
158 scroll_end.event.type = WebInputEvent::GestureScrollEnd; 160 scroll_end.event.type = WebInputEvent::GestureScrollEnd;
159 scroll_end.event.sourceDevice = blink::WebGestureDeviceTouchpad; 161 scroll_end.event.sourceDevice = blink::WebGestureDeviceTouchpad;
160 scroll_end.event.resendingPluginId = -1; 162 scroll_end.event.resendingPluginId = -1;
163 scroll_end.event.data.scrollEnd.deltaUnits = units;
161 SendGesture(scroll_end); 164 SendGesture(scroll_end);
162 } 165 }
163 166
164 void MouseWheelEventQueue::SendGesture( 167 void MouseWheelEventQueue::SendGesture(
165 const GestureEventWithLatencyInfo& gesture) { 168 const GestureEventWithLatencyInfo& gesture) {
166 switch (gesture.event.type) { 169 switch (gesture.event.type) {
167 case WebInputEvent::GestureScrollUpdate: 170 case WebInputEvent::GestureScrollUpdate:
168 if (needs_scroll_begin_) { 171 if (needs_scroll_begin_) {
169 GestureEventWithLatencyInfo scroll_begin(gesture); 172 GestureEventWithLatencyInfo scroll_begin(gesture);
170 scroll_begin.event.type = WebInputEvent::GestureScrollBegin; 173 scroll_begin.event.type = WebInputEvent::GestureScrollBegin;
171 scroll_begin.event.data.scrollBegin.deltaXHint = 174 scroll_begin.event.data.scrollBegin.deltaXHint =
172 gesture.event.data.scrollUpdate.deltaX; 175 gesture.event.data.scrollUpdate.deltaX;
173 scroll_begin.event.data.scrollBegin.deltaYHint = 176 scroll_begin.event.data.scrollBegin.deltaYHint =
174 gesture.event.data.scrollUpdate.deltaY; 177 gesture.event.data.scrollUpdate.deltaY;
175 scroll_begin.event.data.scrollBegin.targetViewport = false; 178 scroll_begin.event.data.scrollBegin.targetViewport = false;
176 scroll_begin.event.data.scrollBegin.deltaHintUnits = 179 scroll_begin.event.data.scrollBegin.deltaHintUnits =
177 gesture.event.data.scrollUpdate.deltaUnits; 180 gesture.event.data.scrollUpdate.deltaUnits;
178 181
179 SendGesture(scroll_begin); 182 SendGesture(scroll_begin);
180 } 183 }
181 if (scroll_end_timer_.IsRunning()) { 184 if (scroll_end_timer_.IsRunning()) {
182 scroll_end_timer_.Reset(); 185 scroll_end_timer_.Reset();
183 } else { 186 } else {
184 scroll_end_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds( 187 scroll_end_timer_.Start(
185 scroll_transaction_ms_), 188 FROM_HERE,
186 this, &MouseWheelEventQueue::SendScrollEnd); 189 base::TimeDelta::FromMilliseconds(scroll_transaction_ms_),
190 base::Bind(&MouseWheelEventQueue::SendScrollEnd,
191 base::Unretained(this),
192 gesture.event.data.scrollUpdate.deltaUnits));
187 } 193 }
188 break; 194 break;
189 case WebInputEvent::GestureScrollEnd: 195 case WebInputEvent::GestureScrollEnd:
190 needs_scroll_begin_ = true; 196 needs_scroll_begin_ = true;
191 break; 197 break;
192 case WebInputEvent::GestureScrollBegin: 198 case WebInputEvent::GestureScrollBegin:
193 needs_scroll_begin_ = false; 199 needs_scroll_begin_ = false;
194 break; 200 break;
195 default: 201 default:
196 return; 202 return;
197 } 203 }
198 client_->SendGestureEvent(gesture); 204 client_->SendGestureEvent(gesture);
199 } 205 }
200 206
201 } // namespace content 207 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698