| OLD | NEW |
| 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/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/metrics/histogram_macros.h" | 8 #include "base/metrics/histogram_macros.h" |
| 9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
| 10 #include "ui/events/base_event_utils.h" | 10 #include "ui/events/base_event_utils.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 | 82 |
| 83 // If event wasn't consumed then generate a gesture scroll for it. | 83 // If event wasn't consumed then generate a gesture scroll for it. |
| 84 if (ack_result != INPUT_EVENT_ACK_STATE_CONSUMED && | 84 if (ack_result != INPUT_EVENT_ACK_STATE_CONSUMED && |
| 85 ui::WebInputEventTraits::CanCauseScroll( | 85 ui::WebInputEventTraits::CanCauseScroll( |
| 86 event_sent_for_gesture_ack_->event) && | 86 event_sent_for_gesture_ack_->event) && |
| 87 event_sent_for_gesture_ack_->event.resendingPluginId == -1 && | 87 event_sent_for_gesture_ack_->event.resendingPluginId == -1 && |
| 88 (scrolling_device_ == blink::WebGestureDeviceUninitialized || | 88 (scrolling_device_ == blink::WebGestureDeviceUninitialized || |
| 89 scrolling_device_ == blink::WebGestureDeviceTouchpad)) { | 89 scrolling_device_ == blink::WebGestureDeviceTouchpad)) { |
| 90 WebGestureEvent scroll_update( | 90 WebGestureEvent scroll_update( |
| 91 WebInputEvent::GestureScrollUpdate, WebInputEvent::NoModifiers, | 91 WebInputEvent::GestureScrollUpdate, WebInputEvent::NoModifiers, |
| 92 event_sent_for_gesture_ack_->event.timeStampSeconds); | 92 event_sent_for_gesture_ack_->event.timeStampSeconds()); |
| 93 | 93 |
| 94 scroll_update.x = event_sent_for_gesture_ack_->event.x; | 94 scroll_update.x = event_sent_for_gesture_ack_->event.x; |
| 95 scroll_update.y = event_sent_for_gesture_ack_->event.y; | 95 scroll_update.y = event_sent_for_gesture_ack_->event.y; |
| 96 scroll_update.globalX = event_sent_for_gesture_ack_->event.globalX; | 96 scroll_update.globalX = event_sent_for_gesture_ack_->event.globalX; |
| 97 scroll_update.globalY = event_sent_for_gesture_ack_->event.globalY; | 97 scroll_update.globalY = event_sent_for_gesture_ack_->event.globalY; |
| 98 scroll_update.sourceDevice = blink::WebGestureDeviceTouchpad; | 98 scroll_update.sourceDevice = blink::WebGestureDeviceTouchpad; |
| 99 scroll_update.resendingPluginId = -1; | 99 scroll_update.resendingPluginId = -1; |
| 100 | 100 |
| 101 // Swap X & Y if Shift is down and when there is no horizontal movement. | 101 // Swap X & Y if Shift is down and when there is no horizontal movement. |
| 102 if ((event_sent_for_gesture_ack_->event.modifiers & | 102 if ((event_sent_for_gesture_ack_->event.modifiers() & |
| 103 WebInputEvent::ShiftKey) != 0 && | 103 WebInputEvent::ShiftKey) != 0 && |
| 104 event_sent_for_gesture_ack_->event.deltaX == 0) { | 104 event_sent_for_gesture_ack_->event.deltaX == 0) { |
| 105 scroll_update.data.scrollUpdate.deltaX = | 105 scroll_update.data.scrollUpdate.deltaX = |
| 106 event_sent_for_gesture_ack_->event.deltaY; | 106 event_sent_for_gesture_ack_->event.deltaY; |
| 107 scroll_update.data.scrollUpdate.deltaY = | 107 scroll_update.data.scrollUpdate.deltaY = |
| 108 event_sent_for_gesture_ack_->event.deltaX; | 108 event_sent_for_gesture_ack_->event.deltaX; |
| 109 } else { | 109 } else { |
| 110 scroll_update.data.scrollUpdate.deltaX = | 110 scroll_update.data.scrollUpdate.deltaX = |
| 111 event_sent_for_gesture_ack_->event.deltaX; | 111 event_sent_for_gesture_ack_->event.deltaX; |
| 112 scroll_update.data.scrollUpdate.deltaY = | 112 scroll_update.data.scrollUpdate.deltaY = |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 } | 214 } |
| 215 } | 215 } |
| 216 } | 216 } |
| 217 | 217 |
| 218 event_sent_for_gesture_ack_.reset(); | 218 event_sent_for_gesture_ack_.reset(); |
| 219 TryForwardNextEventToRenderer(); | 219 TryForwardNextEventToRenderer(); |
| 220 } | 220 } |
| 221 | 221 |
| 222 void MouseWheelEventQueue::OnGestureScrollEvent( | 222 void MouseWheelEventQueue::OnGestureScrollEvent( |
| 223 const GestureEventWithLatencyInfo& gesture_event) { | 223 const GestureEventWithLatencyInfo& gesture_event) { |
| 224 if (gesture_event.event.type == blink::WebInputEvent::GestureScrollBegin) { | 224 if (gesture_event.event.type() == blink::WebInputEvent::GestureScrollBegin) { |
| 225 // If there is a current scroll going on and a new scroll that isn't | 225 // If there is a current scroll going on and a new scroll that isn't |
| 226 // wheel based cancel current one by sending a ScrollEnd. | 226 // wheel based cancel current one by sending a ScrollEnd. |
| 227 if (scroll_end_timer_.IsRunning() && | 227 if (scroll_end_timer_.IsRunning() && |
| 228 gesture_event.event.sourceDevice != blink::WebGestureDeviceTouchpad) { | 228 gesture_event.event.sourceDevice != blink::WebGestureDeviceTouchpad) { |
| 229 base::Closure task = scroll_end_timer_.user_task(); | 229 base::Closure task = scroll_end_timer_.user_task(); |
| 230 scroll_end_timer_.Reset(); | 230 scroll_end_timer_.Reset(); |
| 231 task.Run(); | 231 task.Run(); |
| 232 } | 232 } |
| 233 scrolling_device_ = gesture_event.event.sourceDevice; | 233 scrolling_device_ = gesture_event.event.sourceDevice; |
| 234 } else if (scrolling_device_ == gesture_event.event.sourceDevice && | 234 } else if (scrolling_device_ == gesture_event.event.sourceDevice && |
| 235 (gesture_event.event.type == | 235 (gesture_event.event.type() == |
| 236 blink::WebInputEvent::GestureScrollEnd || | 236 blink::WebInputEvent::GestureScrollEnd || |
| 237 gesture_event.event.type == | 237 gesture_event.event.type() == |
| 238 blink::WebInputEvent::GestureFlingStart)) { | 238 blink::WebInputEvent::GestureFlingStart)) { |
| 239 scrolling_device_ = blink::WebGestureDeviceUninitialized; | 239 scrolling_device_ = blink::WebGestureDeviceUninitialized; |
| 240 if (scroll_end_timer_.IsRunning()) | 240 if (scroll_end_timer_.IsRunning()) |
| 241 scroll_end_timer_.Reset(); | 241 scroll_end_timer_.Reset(); |
| 242 } | 242 } |
| 243 } | 243 } |
| 244 | 244 |
| 245 void MouseWheelEventQueue::TryForwardNextEventToRenderer() { | 245 void MouseWheelEventQueue::TryForwardNextEventToRenderer() { |
| 246 TRACE_EVENT0("input", "MouseWheelEventQueue::TryForwardNextEventToRenderer"); | 246 TRACE_EVENT0("input", "MouseWheelEventQueue::TryForwardNextEventToRenderer"); |
| 247 | 247 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 scroll_begin.data.scrollBegin.deltaHintUnits = | 298 scroll_begin.data.scrollBegin.deltaHintUnits = |
| 299 gesture_update.data.scrollUpdate.deltaUnits; | 299 gesture_update.data.scrollUpdate.deltaUnits; |
| 300 | 300 |
| 301 needs_scroll_begin_ = false; | 301 needs_scroll_begin_ = false; |
| 302 needs_scroll_end_ = true; | 302 needs_scroll_end_ = true; |
| 303 client_->ForwardGestureEventWithLatencyInfo( | 303 client_->ForwardGestureEventWithLatencyInfo( |
| 304 scroll_begin, ui::LatencyInfo(ui::SourceEventType::WHEEL)); | 304 scroll_begin, ui::LatencyInfo(ui::SourceEventType::WHEEL)); |
| 305 } | 305 } |
| 306 | 306 |
| 307 } // namespace content | 307 } // namespace content |
| OLD | NEW |