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 "mojo/converters/blink/blink_input_events_type_converters.h" | 5 #include "mojo/converters/blink/blink_input_events_type_converters.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
11 #include "third_party/WebKit/public/web/WebInputEvent.h" | 11 #include "third_party/WebKit/public/web/WebInputEvent.h" |
12 #include "ui/events/base_event_utils.h" | 12 #include "ui/events/base_event_utils.h" |
13 #include "ui/events/event.h" | 13 #include "ui/events/event.h" |
14 #include "ui/events/keycodes/dom/keycode_converter.h" | 14 #include "ui/events/keycodes/dom/keycode_converter.h" |
15 | 15 |
16 namespace mojo { | 16 namespace mojo { |
17 namespace { | 17 namespace { |
18 | 18 |
19 double EventTimeToWebEventTime(const ui::Event& event) { | 19 // TODO(majidvp): remove this and directly use ui::EventFlagsToWebEventModifiers |
20 return base::TimeDelta::FromInternalValue( | |
21 event.time_stamp().ToInternalValue()) | |
22 .InSecondsF(); | |
23 } | |
24 | |
25 int EventFlagsToWebEventModifiers(int flags) { | 20 int EventFlagsToWebEventModifiers(int flags) { |
26 int modifiers = 0; | 21 int modifiers = 0; |
27 | 22 |
28 if (flags & ui::EF_SHIFT_DOWN) | 23 if (flags & ui::EF_SHIFT_DOWN) |
29 modifiers |= blink::WebInputEvent::ShiftKey; | 24 modifiers |= blink::WebInputEvent::ShiftKey; |
30 if (flags & ui::EF_CONTROL_DOWN) | 25 if (flags & ui::EF_CONTROL_DOWN) |
31 modifiers |= blink::WebInputEvent::ControlKey; | 26 modifiers |= blink::WebInputEvent::ControlKey; |
32 if (flags & ui::EF_ALT_DOWN) | 27 if (flags & ui::EF_ALT_DOWN) |
33 modifiers |= blink::WebInputEvent::AltKey; | 28 modifiers |= blink::WebInputEvent::AltKey; |
34 // TODO(beng): MetaKey/META_MASK | 29 // TODO(beng): MetaKey/META_MASK |
35 if (flags & ui::EF_LEFT_MOUSE_BUTTON) | 30 if (flags & ui::EF_LEFT_MOUSE_BUTTON) |
36 modifiers |= blink::WebInputEvent::LeftButtonDown; | 31 modifiers |= blink::WebInputEvent::LeftButtonDown; |
37 if (flags & ui::EF_MIDDLE_MOUSE_BUTTON) | 32 if (flags & ui::EF_MIDDLE_MOUSE_BUTTON) |
38 modifiers |= blink::WebInputEvent::MiddleButtonDown; | 33 modifiers |= blink::WebInputEvent::MiddleButtonDown; |
39 if (flags & ui::EF_RIGHT_MOUSE_BUTTON) | 34 if (flags & ui::EF_RIGHT_MOUSE_BUTTON) |
40 modifiers |= blink::WebInputEvent::RightButtonDown; | 35 modifiers |= blink::WebInputEvent::RightButtonDown; |
41 if (flags & ui::EF_CAPS_LOCK_ON) | 36 if (flags & ui::EF_CAPS_LOCK_ON) |
42 modifiers |= blink::WebInputEvent::CapsLockOn; | 37 modifiers |= blink::WebInputEvent::CapsLockOn; |
43 return modifiers; | 38 return modifiers; |
44 } | 39 } |
45 | 40 |
| 41 // TODO(majidvp): remove this and directly use ui::EventFlagsToWebEventModifiers |
46 int EventFlagsToWebInputEventModifiers(int flags) { | 42 int EventFlagsToWebInputEventModifiers(int flags) { |
47 return (flags & ui::EF_SHIFT_DOWN ? blink::WebInputEvent::ShiftKey : 0) | | 43 return (flags & ui::EF_SHIFT_DOWN ? blink::WebInputEvent::ShiftKey : 0) | |
48 (flags & ui::EF_CONTROL_DOWN ? blink::WebInputEvent::ControlKey : 0) | | 44 (flags & ui::EF_CONTROL_DOWN ? blink::WebInputEvent::ControlKey : 0) | |
49 (flags & ui::EF_CAPS_LOCK_ON ? blink::WebInputEvent::CapsLockOn : 0) | | 45 (flags & ui::EF_CAPS_LOCK_ON ? blink::WebInputEvent::CapsLockOn : 0) | |
50 (flags & ui::EF_ALT_DOWN ? blink::WebInputEvent::AltKey : 0); | 46 (flags & ui::EF_ALT_DOWN ? blink::WebInputEvent::AltKey : 0); |
51 } | 47 } |
52 | 48 |
53 int GetClickCount(int flags) { | 49 int GetClickCount(int flags) { |
54 if (flags & ui::EF_IS_TRIPLE_CLICK) | 50 if (flags & ui::EF_IS_TRIPLE_CLICK) |
55 return 3; | 51 return 3; |
(...skipping 12 matching lines...) Expand all Loading... |
68 } | 64 } |
69 | 65 |
70 std::unique_ptr<blink::WebInputEvent> BuildWebMouseEventFrom( | 66 std::unique_ptr<blink::WebInputEvent> BuildWebMouseEventFrom( |
71 const ui::PointerEvent& event) { | 67 const ui::PointerEvent& event) { |
72 std::unique_ptr<blink::WebMouseEvent> web_event(new blink::WebMouseEvent); | 68 std::unique_ptr<blink::WebMouseEvent> web_event(new blink::WebMouseEvent); |
73 | 69 |
74 web_event->pointerType = blink::WebPointerProperties::PointerType::Mouse; | 70 web_event->pointerType = blink::WebPointerProperties::PointerType::Mouse; |
75 SetWebMouseEventLocation(event, web_event.get()); | 71 SetWebMouseEventLocation(event, web_event.get()); |
76 | 72 |
77 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); | 73 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); |
78 web_event->timeStampSeconds = EventTimeToWebEventTime(event); | 74 web_event->timeStampSeconds = ui::EventTimeStampToSeconds(event.time_stamp()); |
79 | 75 |
80 web_event->button = blink::WebMouseEvent::ButtonNone; | 76 web_event->button = blink::WebMouseEvent::ButtonNone; |
81 if (event.flags() & ui::EF_LEFT_MOUSE_BUTTON) | 77 if (event.flags() & ui::EF_LEFT_MOUSE_BUTTON) |
82 web_event->button = blink::WebMouseEvent::ButtonLeft; | 78 web_event->button = blink::WebMouseEvent::ButtonLeft; |
83 if (event.flags() & ui::EF_MIDDLE_MOUSE_BUTTON) | 79 if (event.flags() & ui::EF_MIDDLE_MOUSE_BUTTON) |
84 web_event->button = blink::WebMouseEvent::ButtonMiddle; | 80 web_event->button = blink::WebMouseEvent::ButtonMiddle; |
85 if (event.flags() & ui::EF_RIGHT_MOUSE_BUTTON) | 81 if (event.flags() & ui::EF_RIGHT_MOUSE_BUTTON) |
86 web_event->button = blink::WebMouseEvent::ButtonRight; | 82 web_event->button = blink::WebMouseEvent::ButtonRight; |
87 | 83 |
88 switch (event.type()) { | 84 switch (event.type()) { |
(...skipping 18 matching lines...) Expand all Loading... |
107 | 103 |
108 return std::move(web_event); | 104 return std::move(web_event); |
109 } | 105 } |
110 | 106 |
111 std::unique_ptr<blink::WebInputEvent> BuildWebKeyboardEvent( | 107 std::unique_ptr<blink::WebInputEvent> BuildWebKeyboardEvent( |
112 const ui::KeyEvent& event) { | 108 const ui::KeyEvent& event) { |
113 std::unique_ptr<blink::WebKeyboardEvent> web_event( | 109 std::unique_ptr<blink::WebKeyboardEvent> web_event( |
114 new blink::WebKeyboardEvent); | 110 new blink::WebKeyboardEvent); |
115 | 111 |
116 web_event->modifiers = EventFlagsToWebInputEventModifiers(event.flags()); | 112 web_event->modifiers = EventFlagsToWebInputEventModifiers(event.flags()); |
117 web_event->timeStampSeconds = EventTimeToWebEventTime(event); | 113 web_event->timeStampSeconds = ui::EventTimeStampToSeconds(event.time_stamp()); |
118 | 114 |
119 switch (event.type()) { | 115 switch (event.type()) { |
120 case ui::ET_KEY_PRESSED: | 116 case ui::ET_KEY_PRESSED: |
121 web_event->type = event.is_char() ? blink::WebInputEvent::Char | 117 web_event->type = event.is_char() ? blink::WebInputEvent::Char |
122 : blink::WebInputEvent::RawKeyDown; | 118 : blink::WebInputEvent::RawKeyDown; |
123 break; | 119 break; |
124 case ui::ET_KEY_RELEASED: | 120 case ui::ET_KEY_RELEASED: |
125 web_event->type = blink::WebInputEvent::KeyUp; | 121 web_event->type = blink::WebInputEvent::KeyUp; |
126 break; | 122 break; |
127 default: | 123 default: |
(...skipping 13 matching lines...) Expand all Loading... |
141 return std::move(web_event); | 137 return std::move(web_event); |
142 } | 138 } |
143 | 139 |
144 std::unique_ptr<blink::WebInputEvent> BuildWebMouseWheelEventFrom( | 140 std::unique_ptr<blink::WebInputEvent> BuildWebMouseWheelEventFrom( |
145 const ui::MouseWheelEvent& event) { | 141 const ui::MouseWheelEvent& event) { |
146 std::unique_ptr<blink::WebMouseWheelEvent> web_event( | 142 std::unique_ptr<blink::WebMouseWheelEvent> web_event( |
147 new blink::WebMouseWheelEvent); | 143 new blink::WebMouseWheelEvent); |
148 web_event->type = blink::WebInputEvent::MouseWheel; | 144 web_event->type = blink::WebInputEvent::MouseWheel; |
149 web_event->button = blink::WebMouseEvent::ButtonNone; | 145 web_event->button = blink::WebMouseEvent::ButtonNone; |
150 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); | 146 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); |
151 web_event->timeStampSeconds = EventTimeToWebEventTime(event); | 147 web_event->timeStampSeconds = ui::EventTimeStampToSeconds(event.time_stamp()); |
152 | 148 |
153 SetWebMouseEventLocation(event, web_event.get()); | 149 SetWebMouseEventLocation(event, web_event.get()); |
154 | 150 |
155 // TODO(rjkroege): Update the following code once Blink supports | 151 // TODO(rjkroege): Update the following code once Blink supports |
156 // DOM Level 3 wheel events | 152 // DOM Level 3 wheel events |
157 // (http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents) | 153 // (http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents) |
158 web_event->deltaX = event.x_offset(); | 154 web_event->deltaX = event.x_offset(); |
159 web_event->deltaY = event.y_offset(); | 155 web_event->deltaY = event.y_offset(); |
160 | 156 |
161 web_event->wheelTicksX = web_event->deltaX / ui::MouseWheelEvent::kWheelDelta; | 157 web_event->wheelTicksX = web_event->deltaX / ui::MouseWheelEvent::kWheelDelta; |
(...skipping 22 matching lines...) Expand all Loading... |
184 blink::WebTouchPoint* touch = &web_event->touches[event.pointer_id()]; | 180 blink::WebTouchPoint* touch = &web_event->touches[event.pointer_id()]; |
185 | 181 |
186 // TODO(jonross): we will need to buffer input events, as blink expects all | 182 // TODO(jonross): we will need to buffer input events, as blink expects all |
187 // active touch points to be in each WebInputEvent (crbug.com/578160) | 183 // active touch points to be in each WebInputEvent (crbug.com/578160) |
188 SetWebTouchEventLocation(event, touch); | 184 SetWebTouchEventLocation(event, touch); |
189 touch->pointerType = blink::WebPointerProperties::PointerType::Touch; | 185 touch->pointerType = blink::WebPointerProperties::PointerType::Touch; |
190 touch->radiusX = event.pointer_details().radius_x; | 186 touch->radiusX = event.pointer_details().radius_x; |
191 touch->radiusY = event.pointer_details().radius_y; | 187 touch->radiusY = event.pointer_details().radius_y; |
192 | 188 |
193 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); | 189 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); |
194 web_event->timeStampSeconds = EventTimeToWebEventTime(event); | 190 web_event->timeStampSeconds = ui::EventTimeStampToSeconds(event.time_stamp()); |
195 web_event->uniqueTouchEventId = ui::GetNextTouchEventId(); | 191 web_event->uniqueTouchEventId = ui::GetNextTouchEventId(); |
196 | 192 |
197 switch (event.type()) { | 193 switch (event.type()) { |
198 case ui::ET_POINTER_DOWN: | 194 case ui::ET_POINTER_DOWN: |
199 web_event->type = blink::WebInputEvent::TouchStart; | 195 web_event->type = blink::WebInputEvent::TouchStart; |
200 touch->state = blink::WebTouchPoint::StatePressed; | 196 touch->state = blink::WebTouchPoint::StatePressed; |
201 break; | 197 break; |
202 case ui::ET_POINTER_UP: | 198 case ui::ET_POINTER_UP: |
203 web_event->type = blink::WebInputEvent::TouchEnd; | 199 web_event->type = blink::WebInputEvent::TouchEnd; |
204 touch->state = blink::WebTouchPoint::StateReleased; | 200 touch->state = blink::WebTouchPoint::StateReleased; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 return BuildWebMouseWheelEventFrom(*event.AsMouseWheelEvent()); | 240 return BuildWebMouseWheelEventFrom(*event.AsMouseWheelEvent()); |
245 case ui::ET_KEY_PRESSED: | 241 case ui::ET_KEY_PRESSED: |
246 case ui::ET_KEY_RELEASED: | 242 case ui::ET_KEY_RELEASED: |
247 return BuildWebKeyboardEvent(*event.AsKeyEvent()); | 243 return BuildWebKeyboardEvent(*event.AsKeyEvent()); |
248 default: | 244 default: |
249 return nullptr; | 245 return nullptr; |
250 } | 246 } |
251 } | 247 } |
252 | 248 |
253 } // namespace mojo | 249 } // namespace mojo |
OLD | NEW |