OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_TOUCH_EMULATOR_H_ | |
6 #define CONTENT_BROWSER_RENDERER_HOST_INPUT_TOUCH_EMULATOR_H_ | |
7 | |
8 #include "content/browser/renderer_host/input/touch_emulator_client.h" | |
9 #include "content/common/cursors/webcursor.h" | |
10 #include "content/port/common/input_event_ack_state.h" | |
11 #include "third_party/WebKit/public/web/WebInputEvent.h" | |
12 #include "ui/events/gesture_detection/filtered_gesture_provider.h" | |
13 | |
14 namespace content { | |
15 | |
16 // Emulates touch input with mouse and keyboard. | |
17 class CONTENT_EXPORT TouchEmulator : public ui::GestureProviderClient { | |
18 public: | |
19 explicit TouchEmulator(TouchEmulatorClient* client); | |
20 virtual ~TouchEmulator(); | |
21 | |
22 void Enable(bool allow_pinch); | |
23 void Disable(); | |
24 | |
25 // Returns |true| if the event was consumed. | |
26 // TODO(dgozman): maybe pass latency info together with events. | |
27 bool HandleMouseEvent(const blink::WebMouseEvent& event); | |
28 bool HandleMouseWheelEvent(const blink::WebMouseWheelEvent& event); | |
29 bool HandleKeyboardEvent(const blink::WebKeyboardEvent& event); | |
30 | |
31 // Returns |true| if the event ack was consumed. Consumed ack should not | |
32 // propagate any further. | |
33 bool HandleTouchEventAck(InputEventAckState ack_result); | |
34 | |
35 // Cancel any touches, for example, when focus is lost. | |
36 void CancelTouch(); | |
37 | |
38 private: | |
39 // ui::GestureProviderClient implementation. | |
40 virtual void OnGestureEvent(const ui::GestureEventData& gesture) OVERRIDE; | |
41 | |
42 void InitCursorFromResource(WebCursor* cursor, int resource_id); | |
43 void ResetState(); | |
44 void UpdateCursor(); | |
45 bool UpdateShiftPressed(bool shift_pressed); | |
46 | |
47 // Whether we should convert scrolls into pinches. | |
48 bool InPinchGestureMode() const; | |
49 | |
50 bool FillTouchEventAndPoint(const blink::WebMouseEvent& mouse_event); | |
51 void FillPinchEvent(const blink::WebInputEvent& event); | |
52 | |
53 // The following methods generate and pass gesture events to the renderer. | |
54 void PinchBegin(const blink::WebGestureEvent& event); | |
55 void PinchUpdate(const blink::WebGestureEvent& event); | |
56 void PinchEnd(const blink::WebGestureEvent& event); | |
57 void ScrollEnd(const blink::WebGestureEvent& event); | |
58 | |
59 TouchEmulatorClient* const client_; | |
60 ui::FilteredGestureProvider gesture_provider_; | |
61 | |
62 // Disabled emulator does only process touch acks left from previous | |
63 // emulation. It does not intercept any events. | |
64 bool enabled_; | |
65 bool allow_pinch_; | |
66 | |
67 // While emulation is on, default cursor is touch. Pressing shift changes | |
68 // cursor to the pinch one. | |
69 WebCursor pointer_cursor_; | |
70 WebCursor touch_cursor_; | |
71 WebCursor pinch_cursor_; | |
72 | |
73 // These are used to drop extra mouse move events coming too quickly, so | |
74 // we don't handle too much touches in gesture provider. | |
75 bool last_mouse_event_was_move_; | |
76 double last_mouse_move_timestamp_; | |
77 | |
78 bool mouse_pressed_; | |
79 bool shift_pressed_; | |
80 | |
81 blink::WebTouchEvent touch_event_; | |
82 bool touch_active_; | |
83 | |
84 // Whether we should suppress next fling cancel. This may happen when we | |
85 // did not send fling start in pinch mode. | |
86 bool suppress_next_fling_cancel_; | |
87 | |
88 blink::WebGestureEvent pinch_event_; | |
89 // Point which does not move while pinch-zooming. | |
90 gfx::Point pinch_anchor_; | |
91 // The cumulative scale change from the start of pinch gesture. | |
92 float pinch_scale_; | |
93 bool pinch_gesture_active_; | |
94 | |
95 DISALLOW_COPY_AND_ASSIGN(TouchEmulator); | |
96 }; | |
97 | |
98 } // namespace content | |
99 | |
100 #endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_TOUCH_EMULATOR_H_ | |
OLD | NEW |