Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc

Issue 545063006: ozone: evdev: Add gesture property provider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase code again. Fix #ifdef. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698