| 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 } | 257 } |
| 258 | 258 |
| 259 event_sent_for_gesture_ack_.reset(); | 259 event_sent_for_gesture_ack_.reset(); |
| 260 TryForwardNextEventToRenderer(); | 260 TryForwardNextEventToRenderer(); |
| 261 } | 261 } |
| 262 | 262 |
| 263 void MouseWheelEventQueue::OnGestureScrollEvent( | 263 void MouseWheelEventQueue::OnGestureScrollEvent( |
| 264 const GestureEventWithLatencyInfo& gesture_event) { | 264 const GestureEventWithLatencyInfo& gesture_event) { |
| 265 if (gesture_event.event.type == blink::WebInputEvent::GestureScrollBegin) { | 265 if (gesture_event.event.type() == blink::WebInputEvent::GestureScrollBegin) { |
| 266 // If there is a current scroll going on and a new scroll that isn't | 266 // If there is a current scroll going on and a new scroll that isn't |
| 267 // wheel based cancel current one by sending a ScrollEnd. | 267 // wheel based cancel current one by sending a ScrollEnd. |
| 268 if (scroll_end_timer_.IsRunning() && | 268 if (scroll_end_timer_.IsRunning() && |
| 269 gesture_event.event.sourceDevice != blink::WebGestureDeviceTouchpad) { | 269 gesture_event.event.sourceDevice != blink::WebGestureDeviceTouchpad) { |
| 270 base::Closure task = scroll_end_timer_.user_task(); | 270 base::Closure task = scroll_end_timer_.user_task(); |
| 271 scroll_end_timer_.Reset(); | 271 scroll_end_timer_.Reset(); |
| 272 task.Run(); | 272 task.Run(); |
| 273 } | 273 } |
| 274 scrolling_device_ = gesture_event.event.sourceDevice; | 274 scrolling_device_ = gesture_event.event.sourceDevice; |
| 275 } else if (scrolling_device_ == gesture_event.event.sourceDevice && | 275 } else if (scrolling_device_ == gesture_event.event.sourceDevice && |
| 276 (gesture_event.event.type == | 276 (gesture_event.event.type() == |
| 277 blink::WebInputEvent::GestureScrollEnd || | 277 blink::WebInputEvent::GestureScrollEnd || |
| 278 gesture_event.event.type == | 278 gesture_event.event.type() == |
| 279 blink::WebInputEvent::GestureFlingStart)) { | 279 blink::WebInputEvent::GestureFlingStart)) { |
| 280 scrolling_device_ = blink::WebGestureDeviceUninitialized; | 280 scrolling_device_ = blink::WebGestureDeviceUninitialized; |
| 281 if (scroll_end_timer_.IsRunning()) { | 281 if (scroll_end_timer_.IsRunning()) { |
| 282 if (enable_scroll_latching_) { | 282 if (enable_scroll_latching_) { |
| 283 // Don't send the pending ScrollEnd if a fling is happening. | 283 // Don't send the pending ScrollEnd if a fling is happening. |
| 284 // The next wheel event will still need a ScrollBegin. | 284 // The next wheel event will still need a ScrollBegin. |
| 285 scroll_end_timer_.Stop(); | 285 scroll_end_timer_.Stop(); |
| 286 needs_scroll_begin_ = true; | 286 needs_scroll_begin_ = true; |
| 287 needs_scroll_end_ = false; | 287 needs_scroll_end_ = false; |
| 288 } else { | 288 } else { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 scroll_begin.data.scrollBegin.deltaHintUnits = | 348 scroll_begin.data.scrollBegin.deltaHintUnits = |
| 349 gesture_update.data.scrollUpdate.deltaUnits; | 349 gesture_update.data.scrollUpdate.deltaUnits; |
| 350 | 350 |
| 351 needs_scroll_begin_ = false; | 351 needs_scroll_begin_ = false; |
| 352 needs_scroll_end_ = true; | 352 needs_scroll_end_ = true; |
| 353 client_->ForwardGestureEventWithLatencyInfo( | 353 client_->ForwardGestureEventWithLatencyInfo( |
| 354 scroll_begin, ui::LatencyInfo(ui::SourceEventType::WHEEL)); | 354 scroll_begin, ui::LatencyInfo(ui::SourceEventType::WHEEL)); |
| 355 } | 355 } |
| 356 | 356 |
| 357 } // namespace content | 357 } // namespace content |
| OLD | NEW |