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

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

Issue 1749343004: Implement Wheel Gesture Scrolling on OSX. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix non mac builds 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/mouse_wheel_event_queue.cc
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
index 48dbad231bb553d57a13efc79263eecab3a69f64..8e77365d5d2859e5c6f0e1bcdee40bd3fc884257 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -85,6 +85,9 @@ void MouseWheelEventQueue::ProcessMouseWheelAck(
(scrolling_device_ == blink::WebGestureDeviceUninitialized ||
scrolling_device_ == blink::WebGestureDeviceTouchpad)) {
GestureEventWithLatencyInfo scroll_update;
+ scroll_update.event.timeStampSeconds =
+ (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
tdresser 2016/03/02 18:26:53 We should take the timestamp from the wheel event.
dtapuska 2016/03/07 18:03:59 Done.
+
scroll_update.event.x = event_sent_for_gesture_ack_->event.x;
scroll_update.event.y = event_sent_for_gesture_ack_->event.y;
scroll_update.event.globalX = event_sent_for_gesture_ack_->event.globalX;
@@ -96,6 +99,9 @@ void MouseWheelEventQueue::ProcessMouseWheelAck(
event_sent_for_gesture_ack_->event.deltaX;
scroll_update.event.data.scrollUpdate.deltaY =
event_sent_for_gesture_ack_->event.deltaY;
+ scroll_update.event.data.scrollUpdate.inertial =
+ event_sent_for_gesture_ack_->event.momentumPhase !=
+ blink::WebMouseWheelEvent::PhaseNone;
tdresser 2016/03/02 18:26:53 What's the momentum phase for non-mac? Maybe add a
dtapuska 2016/03/07 18:03:59 Done.
if (event_sent_for_gesture_ack_->event.scrollByPage) {
scroll_update.event.data.scrollUpdate.deltaUnits =
blink::WebGestureEvent::Page;
@@ -114,7 +120,30 @@ void MouseWheelEventQueue::ProcessMouseWheelAck(
? blink::WebGestureEvent::PrecisePixels
: blink::WebGestureEvent::Pixels;
}
- SendGesture(scroll_update);
+
+ bool send_end_now = false;
+ bool schedule_end = true;
+
+ if (event_sent_for_gesture_ack_->event.phase !=
+ blink::WebMouseWheelEvent::PhaseNone ||
+ event_sent_for_gesture_ack_->event.momentumPhase !=
+ blink::WebMouseWheelEvent::PhaseNone) {
+ schedule_end = false;
+ send_end_now = event_sent_for_gesture_ack_->event.phase ==
+ blink::WebMouseWheelEvent::PhaseEnded ||
+ event_sent_for_gesture_ack_->event.phase ==
+ blink::WebMouseWheelEvent::PhaseCancelled ||
+ event_sent_for_gesture_ack_->event.momentumPhase ==
+ blink::WebMouseWheelEvent::PhaseEnded ||
+ event_sent_for_gesture_ack_->event.momentumPhase ==
+ blink::WebMouseWheelEvent::PhaseCancelled;
+ }
+
+ if (scroll_update.event.data.scrollUpdate.deltaX != 0 ||
+ scroll_update.event.data.scrollUpdate.deltaY != 0)
+ SendGesture(scroll_update, schedule_end);
+ if (send_end_now)
+ SendScrollEnd(scroll_update.event);
}
event_sent_for_gesture_ack_.reset();
@@ -160,6 +189,8 @@ void MouseWheelEventQueue::TryForwardNextEventToRenderer() {
void MouseWheelEventQueue::SendScrollEnd(blink::WebGestureEvent update_event) {
GestureEventWithLatencyInfo scroll_end;
+ scroll_end.event.timeStampSeconds =
+ (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
tdresser 2016/03/02 18:26:53 I suppose this timestamp needs to be made up, unfo
dtapuska 2016/03/07 18:03:59 Acknowledged.
scroll_end.event.type = WebInputEvent::GestureScrollEnd;
scroll_end.event.sourceDevice = blink::WebGestureDeviceTouchpad;
scroll_end.event.resendingPluginId = -1;
@@ -170,20 +201,24 @@ void MouseWheelEventQueue::SendScrollEnd(blink::WebGestureEvent update_event) {
scroll_end.event.globalX = update_event.globalX;
scroll_end.event.globalY = update_event.globalY;
- SendGesture(scroll_end);
+ SendGesture(scroll_end, false);
}
void MouseWheelEventQueue::SendGesture(
- const GestureEventWithLatencyInfo& gesture) {
+ const GestureEventWithLatencyInfo& gesture,
+ bool generate_end) {
switch (gesture.event.type) {
case WebInputEvent::GestureScrollUpdate:
if (needs_scroll_begin_) {
GestureEventWithLatencyInfo scroll_begin(gesture);
+ scroll_begin.event.timeStampSeconds = gesture.event.timeStampSeconds;
scroll_begin.event.x = gesture.event.x;
scroll_begin.event.y = gesture.event.y;
scroll_begin.event.globalX = gesture.event.globalX;
scroll_begin.event.globalY = gesture.event.globalY;
scroll_begin.event.type = WebInputEvent::GestureScrollBegin;
+ scroll_begin.event.data.scrollBegin.inertial =
+ gesture.event.data.scrollUpdate.inertial;
tdresser 2016/03/02 18:26:53 It isn't clear to me when we'd need a scroll begin
dtapuska 2016/03/07 18:03:59 So the way phasing is done on OSX is that the phas
scroll_begin.event.data.scrollBegin.deltaXHint =
gesture.event.data.scrollUpdate.deltaX;
scroll_begin.event.data.scrollBegin.deltaYHint =
@@ -192,11 +227,12 @@ void MouseWheelEventQueue::SendGesture(
scroll_begin.event.data.scrollBegin.deltaHintUnits =
gesture.event.data.scrollUpdate.deltaUnits;
- SendGesture(scroll_begin);
+ SendGesture(scroll_begin, false);
}
- if (scroll_end_timer_.IsRunning()) {
+ if (scroll_end_timer_.IsRunning())
scroll_end_timer_.Reset();
- } else {
+
+ if (generate_end) {
scroll_end_timer_.Start(
FROM_HERE,
base::TimeDelta::FromMilliseconds(scroll_transaction_ms_),

Powered by Google App Engine
This is Rietveld 408576698