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

Side by Side Diff: ui/events/ozone/evdev/input_controller_evdev.cc

Issue 868213002: [PATCH 7/11] ozone: evdev: Move GesturePropertyProvider to InputDeviceFactoryEvdev (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 10 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/input_controller_evdev.h" 5 #include "ui/events/ozone/evdev/input_controller_evdev.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <linux/input.h> 8 #include <linux/input.h>
9 #include <vector>
10 9
11 #include "base/bind.h"
12 #include "base/strings/stringprintf.h"
13 #include "base/thread_task_runner_handle.h"
14 #include "ui/events/ozone/evdev/input_device_factory_evdev.h" 10 #include "ui/events/ozone/evdev/input_device_factory_evdev.h"
15 #include "ui/events/ozone/evdev/keyboard_evdev.h" 11 #include "ui/events/ozone/evdev/keyboard_evdev.h"
16 #include "ui/events/ozone/evdev/mouse_button_map_evdev.h" 12 #include "ui/events/ozone/evdev/mouse_button_map_evdev.h"
17 13
18 #if defined(USE_EVDEV_GESTURES)
19 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h"
20 #endif
21
22 namespace ui { 14 namespace ui {
23 15
24 namespace { 16 InputControllerEvdev::InputControllerEvdev(KeyboardEvdev* keyboard,
25 17 MouseButtonMapEvdev* button_map)
26 #if defined(USE_EVDEV_GESTURES)
27 void SetGestureIntProperty(GesturePropertyProvider* provider,
28 int id,
29 const std::string& name,
30 int value) {
31 GesturesProp* property = provider->GetProperty(id, name);
32 if (property) {
33 std::vector<int> values(1, value);
34 property->SetIntValue(values);
35 }
36 }
37
38 void SetGestureBoolProperty(GesturePropertyProvider* provider,
39 int id,
40 const std::string& name,
41 bool value) {
42 GesturesProp* property = provider->GetProperty(id, name);
43 if (property) {
44 std::vector<bool> values(1, value);
45 property->SetBoolValue(values);
46 }
47 }
48
49 // Return the values in an array in one string. Used for touch logging.
50 template <typename T>
51 std::string DumpArrayProperty(const std::vector<T>& value, const char* format) {
52 std::string ret;
53 for (size_t i = 0; i < value.size(); ++i) {
54 if (i > 0)
55 ret.append(", ");
56 ret.append(base::StringPrintf(format, value[i]));
57 }
58 return ret;
59 }
60
61 // Return the values in a gesture property in one string. Used for touch
62 // logging.
63 std::string DumpGesturePropertyValue(GesturesProp* property) {
64 switch (property->type()) {
65 case GesturePropertyProvider::PT_INT:
66 return DumpArrayProperty(property->GetIntValue(), "%d");
67 break;
68 case GesturePropertyProvider::PT_SHORT:
69 return DumpArrayProperty(property->GetShortValue(), "%d");
70 break;
71 case GesturePropertyProvider::PT_BOOL:
72 return DumpArrayProperty(property->GetBoolValue(), "%d");
73 break;
74 case GesturePropertyProvider::PT_STRING:
75 return "\"" + property->GetStringValue() + "\"";
76 break;
77 case GesturePropertyProvider::PT_REAL:
78 return DumpArrayProperty(property->GetDoubleValue(), "%lf");
79 break;
80 default:
81 NOTREACHED();
82 break;
83 }
84 return std::string();
85 }
86
87 // Dump touch device property values to a string.
88 void DumpTouchDeviceStatus(InputDeviceFactoryEvdev* event_factory,
89 GesturePropertyProvider* provider,
90 std::string* status) {
91 // We use DT_ALL since we want gesture property values for all devices that
92 // run with the gesture library, not just mice or touchpads.
93 std::vector<int> ids;
94 event_factory->GetDeviceIdsByType(DT_ALL, &ids);
95
96 // Dump the property names and values for each device.
97 for (size_t i = 0; i < ids.size(); ++i) {
98 std::vector<std::string> names = provider->GetPropertyNamesById(ids[i]);
99 status->append("\n");
100 status->append(base::StringPrintf("ID %d:\n", ids[i]));
101 status->append(base::StringPrintf(
102 "Device \'%s\':\n", provider->GetDeviceNameById(ids[i]).c_str()));
103
104 // Note that, unlike X11, we don't maintain the "atom" concept here.
105 // Therefore, the property name indices we output here shouldn't be treated
106 // as unique identifiers of the properties.
107 std::sort(names.begin(), names.end());
108 for (size_t j = 0; j < names.size(); ++j) {
109 status->append(base::StringPrintf("\t%s (%zu):", names[j].c_str(), j));
110 GesturesProp* property = provider->GetProperty(ids[i], names[j]);
111 status->append("\t" + DumpGesturePropertyValue(property) + '\n');
112 }
113 }
114 }
115
116 #endif
117
118 } // namespace
119
120 InputControllerEvdev::InputControllerEvdev(
121 KeyboardEvdev* keyboard,
122 MouseButtonMapEvdev* button_map
123 #if defined(USE_EVDEV_GESTURES)
124 ,
125 GesturePropertyProvider* gesture_property_provider
126 #endif
127 )
128 : input_device_factory_(nullptr), 18 : input_device_factory_(nullptr),
129 keyboard_(keyboard), 19 keyboard_(keyboard),
130 button_map_(button_map) 20 button_map_(button_map) {
131 #if defined(USE_EVDEV_GESTURES)
132 ,
133 gesture_property_provider_(gesture_property_provider)
134 #endif
135 {
136 } 21 }
137 22
138 InputControllerEvdev::~InputControllerEvdev() { 23 InputControllerEvdev::~InputControllerEvdev() {
139 } 24 }
140 25
141 void InputControllerEvdev::SetInputDeviceFactory( 26 void InputControllerEvdev::SetInputDeviceFactory(
142 InputDeviceFactoryEvdev* input_device_factory) { 27 InputDeviceFactoryEvdev* input_device_factory) {
143 input_device_factory_ = input_device_factory; 28 input_device_factory_ = input_device_factory;
144 } 29 }
145 30
146 bool InputControllerEvdev::HasMouse() { 31 bool InputControllerEvdev::HasMouse() {
147 if (!input_device_factory_) 32 if (!input_device_factory_)
148 return false; 33 return false;
149 return input_device_factory_->GetDeviceIdsByType(DT_MOUSE, NULL); 34 return input_device_factory_->HasMouse();
150 } 35 }
151 36
152 bool InputControllerEvdev::HasTouchpad() { 37 bool InputControllerEvdev::HasTouchpad() {
153 if (!input_device_factory_) 38 if (!input_device_factory_)
154 return false; 39 return false;
155 return input_device_factory_->GetDeviceIdsByType(DT_TOUCHPAD, NULL); 40 return input_device_factory_->HasTouchpad();
156 } 41 }
157 42
158 bool InputControllerEvdev::IsCapsLockEnabled() { 43 bool InputControllerEvdev::IsCapsLockEnabled() {
159 return keyboard_->IsCapsLockEnabled(); 44 return keyboard_->IsCapsLockEnabled();
160 } 45 }
161 46
162 void InputControllerEvdev::SetCapsLockEnabled(bool enabled) { 47 void InputControllerEvdev::SetCapsLockEnabled(bool enabled) {
163 keyboard_->SetCapsLockEnabled(enabled); 48 keyboard_->SetCapsLockEnabled(enabled);
164 } 49 }
165 50
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 input_device_factory_->DisableInternalKeyboardExceptKeys( 86 input_device_factory_->DisableInternalKeyboardExceptKeys(
202 excepted_keys.Pass()); 87 excepted_keys.Pass());
203 } 88 }
204 } 89 }
205 90
206 void InputControllerEvdev::EnableInternalKeyboard() { 91 void InputControllerEvdev::EnableInternalKeyboard() {
207 if (input_device_factory_) 92 if (input_device_factory_)
208 input_device_factory_->EnableInternalKeyboard(); 93 input_device_factory_->EnableInternalKeyboard();
209 } 94 }
210 95
211 void InputControllerEvdev::SetIntPropertyForOneType(const EventDeviceType type,
212 const std::string& name,
213 int value) {
214 if (!input_device_factory_)
215 return;
216 #if defined(USE_EVDEV_GESTURES)
217 std::vector<int> ids;
218 input_device_factory_->GetDeviceIdsByType(type, &ids);
219 for (size_t i = 0; i < ids.size(); ++i) {
220 SetGestureIntProperty(gesture_property_provider_, ids[i], name, value);
221 }
222 #endif
223 // In the future, we may add property setting codes for other non-gesture
224 // devices. One example would be keyboard settings.
225 // TODO(sheckylin): See http://crbug.com/398518 for example.
226 }
227
228 void InputControllerEvdev::SetBoolPropertyForOneType(const EventDeviceType type,
229 const std::string& name,
230 bool value) {
231 if (!input_device_factory_)
232 return;
233 #if defined(USE_EVDEV_GESTURES)
234 std::vector<int> ids;
235 input_device_factory_->GetDeviceIdsByType(type, &ids);
236 for (size_t i = 0; i < ids.size(); ++i) {
237 SetGestureBoolProperty(gesture_property_provider_, ids[i], name, value);
238 }
239 #endif
240 }
241
242 void InputControllerEvdev::SetTouchpadSensitivity(int value) { 96 void InputControllerEvdev::SetTouchpadSensitivity(int value) {
243 SetIntPropertyForOneType(DT_TOUCHPAD, "Pointer Sensitivity", value); 97 if (input_device_factory_)
244 SetIntPropertyForOneType(DT_TOUCHPAD, "Scroll Sensitivity", value); 98 input_device_factory_->SetTouchpadSensitivity(value);
245 } 99 }
246 100
247 void InputControllerEvdev::SetTapToClick(bool enabled) { 101 void InputControllerEvdev::SetTapToClick(bool enabled) {
248 SetBoolPropertyForOneType(DT_TOUCHPAD, "Tap Enable", enabled); 102 if (input_device_factory_)
103 input_device_factory_->SetTapToClick(enabled);
249 } 104 }
250 105
251 void InputControllerEvdev::SetThreeFingerClick(bool enabled) { 106 void InputControllerEvdev::SetThreeFingerClick(bool enabled) {
252 SetBoolPropertyForOneType(DT_TOUCHPAD, "T5R2 Three Finger Click Enable", 107 if (input_device_factory_)
253 enabled); 108 input_device_factory_->SetThreeFingerClick(enabled);
254 } 109 }
255 110
256 void InputControllerEvdev::SetTapDragging(bool enabled) { 111 void InputControllerEvdev::SetTapDragging(bool enabled) {
257 SetBoolPropertyForOneType(DT_TOUCHPAD, "Tap Drag Enable", enabled); 112 if (input_device_factory_)
113 input_device_factory_->SetTapDragging(enabled);
258 } 114 }
259 115
260 void InputControllerEvdev::SetNaturalScroll(bool enabled) { 116 void InputControllerEvdev::SetNaturalScroll(bool enabled) {
261 SetBoolPropertyForOneType(DT_MULTITOUCH, "Australian Scrolling", enabled); 117 if (input_device_factory_)
118 input_device_factory_->SetNaturalScroll(enabled);
262 } 119 }
263 120
264 void InputControllerEvdev::SetMouseSensitivity(int value) { 121 void InputControllerEvdev::SetMouseSensitivity(int value) {
265 SetIntPropertyForOneType(DT_MOUSE, "Pointer Sensitivity", value); 122 if (input_device_factory_)
266 SetIntPropertyForOneType(DT_MOUSE, "Scroll Sensitivity", value); 123 input_device_factory_->SetMouseSensitivity(value);
267 } 124 }
268 125
269 void InputControllerEvdev::SetPrimaryButtonRight(bool right) { 126 void InputControllerEvdev::SetPrimaryButtonRight(bool right) {
270 button_map_->UpdateButtonMap(BTN_LEFT, right ? BTN_RIGHT : BTN_LEFT); 127 button_map_->UpdateButtonMap(BTN_LEFT, right ? BTN_RIGHT : BTN_LEFT);
271 button_map_->UpdateButtonMap(BTN_RIGHT, right ? BTN_LEFT : BTN_RIGHT); 128 button_map_->UpdateButtonMap(BTN_RIGHT, right ? BTN_LEFT : BTN_RIGHT);
272 } 129 }
273 130
274 void InputControllerEvdev::SetTapToClickPaused(bool state) { 131 void InputControllerEvdev::SetTapToClickPaused(bool state) {
275 SetBoolPropertyForOneType(DT_TOUCHPAD, "Tap Paused", state); 132 if (input_device_factory_)
133 input_device_factory_->SetTapToClickPaused(state);
276 } 134 }
277 135
278 void InputControllerEvdev::GetTouchDeviceStatus( 136 void InputControllerEvdev::GetTouchDeviceStatus(
279 const GetTouchDeviceStatusReply& reply) { 137 const GetTouchDeviceStatusReply& reply) {
280 scoped_ptr<std::string> status(new std::string); 138 if (input_device_factory_)
281 #if defined(USE_EVDEV_GESTURES) 139 input_device_factory_->GetTouchDeviceStatus(reply);
282 std::string* status_ptr = status.get(); 140 else
283 base::ThreadTaskRunnerHandle::Get()->PostTaskAndReply( 141 reply.Run(make_scoped_ptr(new std::string));
284 FROM_HERE, base::Bind(&DumpTouchDeviceStatus, input_device_factory_,
285 gesture_property_provider_, status_ptr),
286 base::Bind(reply, base::Passed(&status)));
287 #else
288 reply.Run(status.Pass());
289 #endif
290 } 142 }
291 143
292 } // namespace ui 144 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/input_controller_evdev.h ('k') | ui/events/ozone/evdev/input_device_factory_evdev.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698