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 "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cr
os.h" | 5 #include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cr
os.h" |
6 | 6 |
7 #include <gestures/gestures.h> | 7 #include <gestures/gestures.h> |
8 #include <libevdev/libevdev.h> | 8 #include <libevdev/libevdev.h> |
9 | 9 |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
11 #include "base/timer/timer.h" | 11 #include "base/timer/timer.h" |
12 #include "ui/events/event.h" | 12 #include "ui/events/event.h" |
13 #include "ui/events/ozone/evdev/cursor_delegate_evdev.h" | 13 #include "ui/events/ozone/evdev/cursor_delegate_evdev.h" |
14 #include "ui/events/ozone/evdev/event_device_util.h" | 14 #include "ui/events/ozone/evdev/event_device_util.h" |
15 #include "ui/events/ozone/evdev/event_modifiers_evdev.h" | 15 #include "ui/events/ozone/evdev/event_modifiers_evdev.h" |
16 #include "ui/events/ozone/evdev/keyboard_evdev.h" | 16 #include "ui/events/ozone/evdev/keyboard_evdev.h" |
| 17 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h" |
17 #include "ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h" | 18 #include "ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h" |
18 #include "ui/gfx/geometry/point_f.h" | 19 #include "ui/gfx/geometry/point_f.h" |
19 | 20 |
20 namespace ui { | 21 namespace ui { |
21 | 22 |
22 namespace { | 23 namespace { |
23 | 24 |
24 // Convert libevdev device class to libgestures device class. | 25 // Convert libevdev device class to libgestures device class. |
25 GestureInterpreterDeviceClass GestureDeviceClass(Evdev* evdev) { | 26 GestureInterpreterDeviceClass GestureDeviceClass(Evdev* evdev) { |
26 switch (evdev->info.evdev_class) { | 27 switch (evdev->info.evdev_class) { |
27 case EvdevClassMouse: | 28 case EvdevClassMouse: |
28 return GESTURES_DEVCLASS_MOUSE; | 29 return GESTURES_DEVCLASS_MOUSE; |
29 case EvdevClassMultitouchMouse: | 30 case EvdevClassMultitouchMouse: |
30 return GESTURES_DEVCLASS_MULTITOUCH_MOUSE; | 31 return GESTURES_DEVCLASS_MULTITOUCH_MOUSE; |
31 case EvdevClassTouchpad: | 32 case EvdevClassTouchpad: |
32 return GESTURES_DEVCLASS_TOUCHPAD; | 33 return GESTURES_DEVCLASS_TOUCHPAD; |
33 case EvdevClassTouchscreen: | 34 case EvdevClassTouchscreen: |
34 return GESTURES_DEVCLASS_TOUCHSCREEN; | 35 return GESTURES_DEVCLASS_TOUCHSCREEN; |
35 default: | 36 default: |
36 return GESTURES_DEVCLASS_UNKNOWN; | 37 return GESTURES_DEVCLASS_UNKNOWN; |
37 } | 38 } |
38 } | 39 } |
39 | 40 |
40 // Convert libevdev state to libgestures hardware properties. | 41 // Convert libevdev state to libgestures hardware properties. |
41 HardwareProperties GestureHardwareProperties(Evdev* evdev) { | 42 HardwareProperties GestureHardwareProperties( |
| 43 Evdev* evdev, |
| 44 const GestureDeviceProperties* props) { |
42 HardwareProperties hwprops; | 45 HardwareProperties hwprops; |
43 hwprops.left = Event_Get_Left(evdev); | 46 hwprops.left = props->area_left; |
44 hwprops.top = Event_Get_Top(evdev); | 47 hwprops.top = props->area_top; |
45 hwprops.right = Event_Get_Right(evdev); | 48 hwprops.right = props->area_right; |
46 hwprops.bottom = Event_Get_Bottom(evdev); | 49 hwprops.bottom = props->area_bottom; |
47 hwprops.res_x = Event_Get_Res_X(evdev); | 50 hwprops.res_x = props->res_x; |
48 hwprops.res_y = Event_Get_Res_Y(evdev); | 51 hwprops.res_y = props->res_y; |
49 hwprops.screen_x_dpi = 133; | 52 hwprops.screen_x_dpi = 133; |
50 hwprops.screen_y_dpi = 133; | 53 hwprops.screen_y_dpi = 133; |
51 hwprops.orientation_minimum = Event_Get_Orientation_Minimum(evdev); | 54 hwprops.orientation_minimum = props->orientation_minimum; |
52 hwprops.orientation_maximum = Event_Get_Orientation_Maximum(evdev); | 55 hwprops.orientation_maximum = props->orientation_maximum; |
53 hwprops.max_finger_cnt = Event_Get_Slot_Count(evdev); | 56 hwprops.max_finger_cnt = Event_Get_Slot_Count(evdev); |
54 hwprops.max_touch_cnt = Event_Get_Touch_Count_Max(evdev); | 57 hwprops.max_touch_cnt = Event_Get_Touch_Count_Max(evdev); |
55 hwprops.supports_t5r2 = Event_Get_T5R2(evdev); | 58 hwprops.supports_t5r2 = Event_Get_T5R2(evdev); |
56 hwprops.support_semi_mt = Event_Get_Semi_MT(evdev); | 59 hwprops.support_semi_mt = Event_Get_Semi_MT(evdev); |
57 /* buttonpad means a physical button under the touch surface */ | 60 /* buttonpad means a physical button under the touch surface */ |
58 hwprops.is_button_pad = Event_Get_Button_Pad(evdev); | 61 hwprops.is_button_pad = Event_Get_Button_Pad(evdev); |
59 return hwprops; | 62 return hwprops; |
60 } | 63 } |
61 | 64 |
62 // Callback from libgestures when a gesture is ready. | 65 // Callback from libgestures when a gesture is ready. |
(...skipping 11 matching lines...) Expand all Loading... |
74 | 77 |
75 // Number of fingers for scroll gestures. | 78 // Number of fingers for scroll gestures. |
76 const int kGestureScrollFingerCount = 2; | 79 const int kGestureScrollFingerCount = 2; |
77 | 80 |
78 // Number of fingers for swipe gestures. | 81 // Number of fingers for swipe gestures. |
79 const int kGestureSwipeFingerCount = 3; | 82 const int kGestureSwipeFingerCount = 3; |
80 | 83 |
81 } // namespace | 84 } // namespace |
82 | 85 |
83 GestureInterpreterLibevdevCros::GestureInterpreterLibevdevCros( | 86 GestureInterpreterLibevdevCros::GestureInterpreterLibevdevCros( |
| 87 int id, |
84 EventModifiersEvdev* modifiers, | 88 EventModifiersEvdev* modifiers, |
85 CursorDelegateEvdev* cursor, | 89 CursorDelegateEvdev* cursor, |
86 KeyboardEvdev* keyboard, | 90 KeyboardEvdev* keyboard, |
| 91 GesturePropertyProvider* property_provider, |
87 const EventDispatchCallback& callback) | 92 const EventDispatchCallback& callback) |
88 : modifiers_(modifiers), | 93 : id_(id), |
| 94 modifiers_(modifiers), |
89 cursor_(cursor), | 95 cursor_(cursor), |
90 keyboard_(keyboard), | 96 keyboard_(keyboard), |
| 97 property_provider_(property_provider), |
91 dispatch_callback_(callback), | 98 dispatch_callback_(callback), |
92 interpreter_(NULL) { | 99 interpreter_(NULL), |
| 100 evdev_(NULL), |
| 101 device_properties_(new GestureDeviceProperties) { |
93 memset(&prev_key_state_, 0, sizeof(prev_key_state_)); | 102 memset(&prev_key_state_, 0, sizeof(prev_key_state_)); |
94 } | 103 } |
95 | 104 |
96 GestureInterpreterLibevdevCros::~GestureInterpreterLibevdevCros() { | 105 GestureInterpreterLibevdevCros::~GestureInterpreterLibevdevCros() { |
| 106 // Note that this destructor got called after the evdev device node has been |
| 107 // closed. Therefore, all clean-up codes here shouldn't depend on the device |
| 108 // information (except for the pointer address itself). |
| 109 |
| 110 // Clean-up if the gesture interpreter has been successfully created. |
97 if (interpreter_) { | 111 if (interpreter_) { |
| 112 // Unset callbacks. |
| 113 GestureInterpreterSetCallback(interpreter_, NULL, NULL); |
| 114 GestureInterpreterSetPropProvider(interpreter_, NULL, NULL); |
| 115 GestureInterpreterSetTimerProvider(interpreter_, NULL, NULL); |
98 DeleteGestureInterpreter(interpreter_); | 116 DeleteGestureInterpreter(interpreter_); |
99 interpreter_ = NULL; | 117 interpreter_ = NULL; |
100 } | 118 } |
| 119 |
| 120 // Unregister device from the gesture property provider. |
| 121 GesturesPropFunctionsWrapper::UnregisterDevice(this); |
101 } | 122 } |
102 | 123 |
103 void GestureInterpreterLibevdevCros::OnLibEvdevCrosOpen( | 124 void GestureInterpreterLibevdevCros::OnLibEvdevCrosOpen( |
104 Evdev* evdev, | 125 Evdev* evdev, |
105 EventStateRec* evstate) { | 126 EventStateRec* evstate) { |
106 DCHECK(evdev->info.is_monotonic) << "libevdev must use monotonic timestamps"; | 127 DCHECK(evdev->info.is_monotonic) << "libevdev must use monotonic timestamps"; |
107 VLOG(9) << "HACK DO NOT REMOVE OR LINK WILL FAIL" << (void*)gestures_log; | 128 VLOG(9) << "HACK DO NOT REMOVE OR LINK WILL FAIL" << (void*)gestures_log; |
108 | 129 |
109 HardwareProperties hwprops = GestureHardwareProperties(evdev); | 130 // Set device pointer and initialize properties. |
| 131 evdev_ = evdev; |
| 132 GesturesPropFunctionsWrapper::InitializeDeviceProperties( |
| 133 this, device_properties_.get()); |
| 134 HardwareProperties hwprops = |
| 135 GestureHardwareProperties(evdev, device_properties_.get()); |
110 GestureInterpreterDeviceClass devclass = GestureDeviceClass(evdev); | 136 GestureInterpreterDeviceClass devclass = GestureDeviceClass(evdev); |
111 | 137 |
112 // Create & initialize GestureInterpreter. | 138 // Create & initialize GestureInterpreter. |
113 DCHECK(!interpreter_); | 139 DCHECK(!interpreter_); |
114 interpreter_ = NewGestureInterpreter(); | 140 interpreter_ = NewGestureInterpreter(); |
| 141 GestureInterpreterSetPropProvider( |
| 142 interpreter_, |
| 143 const_cast<GesturesPropProvider*>(&kGesturePropProvider), |
| 144 this); |
115 GestureInterpreterInitialize(interpreter_, devclass); | 145 GestureInterpreterInitialize(interpreter_, devclass); |
116 GestureInterpreterSetHardwareProperties(interpreter_, &hwprops); | 146 GestureInterpreterSetHardwareProperties(interpreter_, &hwprops); |
117 GestureInterpreterSetTimerProvider( | 147 GestureInterpreterSetTimerProvider( |
118 interpreter_, | 148 interpreter_, |
119 const_cast<GesturesTimerProvider*>(&kGestureTimerProvider), | 149 const_cast<GesturesTimerProvider*>(&kGestureTimerProvider), |
120 this); | 150 this); |
121 GestureInterpreterSetCallback(interpreter_, OnGestureReadyHelper, this); | 151 GestureInterpreterSetCallback(interpreter_, OnGestureReadyHelper, this); |
122 } | 152 } |
123 | 153 |
124 void GestureInterpreterLibevdevCros::OnLibEvdevCrosEvent(Evdev* evdev, | 154 void GestureInterpreterLibevdevCros::OnLibEvdevCrosEvent(Evdev* evdev, |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 keyboard_->OnKeyChange(i, value); | 449 keyboard_->OnKeyChange(i, value); |
420 } | 450 } |
421 } | 451 } |
422 | 452 |
423 // Update internal key state. | 453 // Update internal key state. |
424 for (unsigned long i = 0; i < EVDEV_BITS_TO_LONGS(KEY_CNT); ++i) | 454 for (unsigned long i = 0; i < EVDEV_BITS_TO_LONGS(KEY_CNT); ++i) |
425 prev_key_state_[i] = evdev->key_state_bitmask[i]; | 455 prev_key_state_[i] = evdev->key_state_bitmask[i]; |
426 } | 456 } |
427 | 457 |
428 } // namespace ui | 458 } // namespace ui |
OLD | NEW |