OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/touch_emulator.h" | 5 #include "content/browser/renderer_host/input/touch_emulator.h" |
6 | 6 |
7 #include "content/browser/renderer_host/input/motion_event_web.h" | 7 #include "content/browser/renderer_host/input/motion_event_web.h" |
8 #include "content/browser/renderer_host/input/web_input_event_util.h" | 8 #include "content/browser/renderer_host/input/web_input_event_util.h" |
9 #include "content/common/input/web_touch_event_traits.h" | 9 #include "content/common/input/web_touch_event_traits.h" |
10 #include "content/grit/content_resources.h" | 10 #include "content/grit/content_resources.h" |
11 #include "content/public/common/content_client.h" | 11 #include "content/public/common/content_client.h" |
12 #include "content/public/common/content_switches.h" | 12 #include "content/public/common/content_switches.h" |
13 #include "third_party/WebKit/public/platform/WebCursorInfo.h" | 13 #include "third_party/WebKit/public/platform/WebCursorInfo.h" |
14 #include "ui/events/gesture_detection/gesture_provider_config_helper.h" | 14 #include "ui/events/gesture_detection/gesture_provider_config_helper.h" |
15 #include "ui/gfx/image/image.h" | 15 #include "ui/gfx/image/image.h" |
16 #include "ui/gfx/screen.h" | 16 #include "ui/gfx/screen.h" |
17 | 17 |
18 using blink::WebGestureEvent; | 18 using blink::WebGestureEvent; |
19 using blink::WebInputEvent; | 19 using blink::WebInputEvent; |
20 using blink::WebKeyboardEvent; | 20 using blink::WebKeyboardEvent; |
21 using blink::WebMouseEvent; | 21 using blink::WebMouseEvent; |
22 using blink::WebMouseWheelEvent; | 22 using blink::WebMouseWheelEvent; |
23 using blink::WebTouchEvent; | 23 using blink::WebTouchEvent; |
24 using blink::WebTouchPoint; | 24 using blink::WebTouchPoint; |
25 | 25 |
26 namespace content { | 26 namespace content { |
27 | 27 |
28 namespace { | 28 namespace { |
29 | 29 |
30 ui::GestureProvider::Config GetGestureProviderConfig() { | 30 ui::GestureProvider::Config GetEmulatorGestureProviderConfig( |
31 // TODO(dgozman): Use different configs to emulate mobile/desktop as | 31 ui::GestureProviderConfigType config_type) { |
32 // requested by renderer, crbug/425586. | 32 ui::GestureProvider::Config config = |
33 ui::GestureProvider::Config config = ui::GetGestureProviderConfig( | 33 ui::GetGestureProviderConfig(config_type); |
34 ui::GestureProviderConfigType::GENERIC_MOBILE); | |
35 config.gesture_begin_end_types_enabled = false; | 34 config.gesture_begin_end_types_enabled = false; |
36 config.gesture_detector_config.swipe_enabled = false; | 35 config.gesture_detector_config.swipe_enabled = false; |
37 config.gesture_detector_config.two_finger_tap_enabled = false; | 36 config.gesture_detector_config.two_finger_tap_enabled = false; |
38 return config; | 37 return config; |
39 } | 38 } |
40 | 39 |
41 // Time between two consecutive mouse moves, during which second mouse move | 40 // Time between two consecutive mouse moves, during which second mouse move |
42 // is not converted to touch. | 41 // is not converted to touch. |
43 const double kMouseMoveDropIntervalSeconds = 5.f / 1000; | 42 const double kMouseMoveDropIntervalSeconds = 5.f / 1000; |
44 | 43 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
77 void TouchEmulator::ResetState() { | 76 void TouchEmulator::ResetState() { |
78 last_mouse_event_was_move_ = false; | 77 last_mouse_event_was_move_ = false; |
79 last_mouse_move_timestamp_ = 0; | 78 last_mouse_move_timestamp_ = 0; |
80 mouse_pressed_ = false; | 79 mouse_pressed_ = false; |
81 shift_pressed_ = false; | 80 shift_pressed_ = false; |
82 suppress_next_fling_cancel_ = false; | 81 suppress_next_fling_cancel_ = false; |
83 pinch_scale_ = 1.f; | 82 pinch_scale_ = 1.f; |
84 pinch_gesture_active_ = false; | 83 pinch_gesture_active_ = false; |
85 } | 84 } |
86 | 85 |
87 void TouchEmulator::Enable() { | 86 void TouchEmulator::Enable(ui::GestureProviderConfigType config_type) { |
88 if (!gesture_provider_) { | 87 gesture_provider_.reset(new ui::FilteredGestureProvider( |
jdduke (slow)
2014/12/30 18:13:00
I'm a little concerned about repeated enables (wit
dgozman
2015/01/14 14:00:23
Yeah, but what else can we do?
With this code, ren
| |
89 gesture_provider_.reset(new ui::FilteredGestureProvider( | 88 GetEmulatorGestureProviderConfig(config_type), this)); |
90 GetGestureProviderConfig(), this)); | 89 // TODO(dgozman): Use synthetic secondary touch to support multi-touch. |
91 // TODO(dgozman): Use synthetic secondary touch to support multi-touch. | 90 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); |
92 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); | 91 // TODO(dgozman): Enable double tap if requested by the renderer. |
93 // TODO(dgozman): Enable double tap if requested by the renderer. | 92 // TODO(dgozman): Don't break double-tap-based pinch with shift handling. |
94 // TODO(dgozman): Don't break double-tap-based pinch with shift handling. | 93 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); |
95 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); | |
96 | |
97 ResetState(); | |
98 } | |
99 UpdateCursor(); | 94 UpdateCursor(); |
100 } | 95 } |
101 | 96 |
102 void TouchEmulator::Disable() { | 97 void TouchEmulator::Disable() { |
103 if (!gesture_provider_) | 98 if (!gesture_provider_) |
104 return; | 99 return; |
105 | 100 |
106 UpdateCursor(); | 101 UpdateCursor(); |
107 CancelTouch(); | 102 CancelTouch(); |
108 gesture_provider_.reset(); | 103 gesture_provider_.reset(); |
104 ResetState(); | |
109 } | 105 } |
110 | 106 |
111 gfx::SizeF TouchEmulator::InitCursorFromResource( | 107 gfx::SizeF TouchEmulator::InitCursorFromResource( |
112 WebCursor* cursor, float scale, int resource_id) { | 108 WebCursor* cursor, float scale, int resource_id) { |
113 gfx::Image& cursor_image = | 109 gfx::Image& cursor_image = |
114 content::GetContentClient()->GetNativeImageNamed(resource_id); | 110 content::GetContentClient()->GetNativeImageNamed(resource_id); |
115 WebCursor::CursorInfo cursor_info; | 111 WebCursor::CursorInfo cursor_info; |
116 cursor_info.type = blink::WebCursorInfo::TypeCustom; | 112 cursor_info.type = blink::WebCursorInfo::TypeCustom; |
117 cursor_info.image_scale_factor = scale; | 113 cursor_info.image_scale_factor = scale; |
118 cursor_info.custom_image = cursor_image.AsBitmap(); | 114 cursor_info.custom_image = cursor_image.AsBitmap(); |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
435 point.screenPosition.x = mouse_event.globalX; | 431 point.screenPosition.x = mouse_event.globalX; |
436 point.position.y = mouse_event.y; | 432 point.position.y = mouse_event.y; |
437 point.screenPosition.y = mouse_event.globalY; | 433 point.screenPosition.y = mouse_event.globalY; |
438 } | 434 } |
439 | 435 |
440 bool TouchEmulator::InPinchGestureMode() const { | 436 bool TouchEmulator::InPinchGestureMode() const { |
441 return shift_pressed_; | 437 return shift_pressed_; |
442 } | 438 } |
443 | 439 |
444 } // namespace content | 440 } // namespace content |
OLD | NEW |