| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/base/events.h" | 5 #include "ui/base/events.h" |
| 6 | 6 |
| 7 #include <X11/extensions/XInput2.h> | 7 #include <X11/extensions/XInput2.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "ui/base/keycodes/keyboard_code_conversion_x.h" | 10 #include "ui/base/keycodes/keyboard_code_conversion_x.h" |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 EventType EventTypeFromNative(const base::NativeEvent& native_event) { | 141 EventType EventTypeFromNative(const base::NativeEvent& native_event) { |
| 142 switch (native_event->type) { | 142 switch (native_event->type) { |
| 143 case KeyPress: | 143 case KeyPress: |
| 144 return ET_KEY_PRESSED; | 144 return ET_KEY_PRESSED; |
| 145 case KeyRelease: | 145 case KeyRelease: |
| 146 return ET_KEY_RELEASED; | 146 return ET_KEY_RELEASED; |
| 147 case ButtonPress: | 147 case ButtonPress: |
| 148 if (native_event->xbutton.button == 4 || | 148 if (native_event->xbutton.button == 4 || |
| 149 native_event->xbutton.button == 5) | 149 native_event->xbutton.button == 5) |
| 150 return ET_MOUSEWHEEL; | 150 return ET_MOUSEWHEEL; |
| 151 #if defined (OS_CHROMEOS) |
| 152 if (native_event->xbutton.button == 8 || |
| 153 native_event->xbutton.button == 9) |
| 154 return ET_MOUSEWHEEL; |
| 155 #endif |
| 151 return ET_MOUSE_PRESSED; | 156 return ET_MOUSE_PRESSED; |
| 152 case ButtonRelease: | 157 case ButtonRelease: |
| 153 if (native_event->xbutton.button == 4 || | 158 if (native_event->xbutton.button == 4 || |
| 154 native_event->xbutton.button == 5) | 159 native_event->xbutton.button == 5) |
| 155 return ET_MOUSEWHEEL; | 160 return ET_MOUSEWHEEL; |
| 161 #if defined (OS_CHROMEOS) |
| 162 if (native_event->xbutton.button == 8 || |
| 163 native_event->xbutton.button == 9) |
| 164 return ET_MOUSEWHEEL; |
| 165 #endif |
| 156 return ET_MOUSE_RELEASED; | 166 return ET_MOUSE_RELEASED; |
| 157 case MotionNotify: | 167 case MotionNotify: |
| 158 if (native_event->xmotion.state & | 168 if (native_event->xmotion.state & |
| 159 (Button1Mask | Button2Mask | Button3Mask)) | 169 (Button1Mask | Button2Mask | Button3Mask)) |
| 160 return ET_MOUSE_DRAGGED; | 170 return ET_MOUSE_DRAGGED; |
| 161 return ET_MOUSE_MOVED; | 171 return ET_MOUSE_MOVED; |
| 162 case EnterNotify: | 172 case EnterNotify: |
| 163 return ET_MOUSE_ENTERED; | 173 return ET_MOUSE_ENTERED; |
| 164 case LeaveNotify: | 174 case LeaveNotify: |
| 165 return ET_MOUSE_EXITED; | 175 return ET_MOUSE_EXITED; |
| 166 case GenericEvent: { | 176 case GenericEvent: { |
| 167 XIDeviceEvent* xievent = | 177 XIDeviceEvent* xievent = |
| 168 static_cast<XIDeviceEvent*>(native_event->xcookie.data); | 178 static_cast<XIDeviceEvent*>(native_event->xcookie.data); |
| 169 if (TouchFactory::GetInstance()->IsTouchDevice(xievent->sourceid)) | 179 if (TouchFactory::GetInstance()->IsTouchDevice(xievent->sourceid)) |
| 170 return GetTouchEventType(native_event); | 180 return GetTouchEventType(native_event); |
| 171 switch (xievent->evtype) { | 181 switch (xievent->evtype) { |
| 172 case XI_ButtonPress: | 182 case XI_ButtonPress: |
| 183 #if defined (OS_CHROMEOS) |
| 184 if (xievent->detail == 8 || xievent->detail == 9) |
| 185 return ET_MOUSEWHEEL; |
| 186 #endif |
| 173 return (xievent->detail == 4 || xievent->detail == 5) ? | 187 return (xievent->detail == 4 || xievent->detail == 5) ? |
| 174 ET_MOUSEWHEEL : ET_MOUSE_PRESSED; | 188 ET_MOUSEWHEEL : ET_MOUSE_PRESSED; |
| 175 case XI_ButtonRelease: | 189 case XI_ButtonRelease: |
| 190 #if defined (OS_CHROMEOS) |
| 191 if (xievent->detail == 8 || xievent->detail == 9) |
| 192 return ET_MOUSEWHEEL; |
| 193 #endif |
| 176 return (xievent->detail == 4 || xievent->detail == 5) ? | 194 return (xievent->detail == 4 || xievent->detail == 5) ? |
| 177 ET_MOUSEWHEEL : ET_MOUSE_RELEASED; | 195 ET_MOUSEWHEEL : ET_MOUSE_RELEASED; |
| 178 case XI_Motion: | 196 case XI_Motion: |
| 179 return GetButtonMaskForX2Event(xievent) ? | 197 return GetButtonMaskForX2Event(xievent) ? |
| 180 ET_MOUSE_DRAGGED : ET_MOUSE_MOVED; | 198 ET_MOUSE_DRAGGED : ET_MOUSE_MOVED; |
| 181 } | 199 } |
| 182 } | 200 } |
| 183 default: | 201 default: |
| 184 break; | 202 break; |
| 185 } | 203 } |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 XIDeviceEvent* xievent = | 265 XIDeviceEvent* xievent = |
| 248 static_cast<XIDeviceEvent*>(native_event->xcookie.data); | 266 static_cast<XIDeviceEvent*>(native_event->xcookie.data); |
| 249 return xievent->evtype == XI_ButtonPress || | 267 return xievent->evtype == XI_ButtonPress || |
| 250 xievent->evtype == XI_ButtonRelease || | 268 xievent->evtype == XI_ButtonRelease || |
| 251 xievent->evtype == XI_Motion; | 269 xievent->evtype == XI_Motion; |
| 252 } | 270 } |
| 253 return false; | 271 return false; |
| 254 } | 272 } |
| 255 | 273 |
| 256 int GetMouseWheelOffset(const base::NativeEvent& native_event) { | 274 int GetMouseWheelOffset(const base::NativeEvent& native_event) { |
| 275 int button; |
| 257 if (native_event->type == GenericEvent) { | 276 if (native_event->type == GenericEvent) { |
| 258 XIDeviceEvent* xiev = | 277 XIDeviceEvent* xiev = |
| 259 static_cast<XIDeviceEvent*>(native_event->xcookie.data); | 278 static_cast<XIDeviceEvent*>(native_event->xcookie.data); |
| 260 return xiev->detail == 4 ? kWheelScrollAmount : -kWheelScrollAmount; | 279 button = xiev->detail; |
| 280 } else { |
| 281 button = native_event->xbutton.button; |
| 261 } | 282 } |
| 262 return native_event->xbutton.button == 4 ? | 283 #if defined(OS_CHROMEOS) |
| 263 kWheelScrollAmount : -kWheelScrollAmount; | 284 if (button == 8) |
| 285 return kWheelScrollAmount; |
| 286 else if (button == 9) |
| 287 return -kWheelScrollAmount; |
| 288 #endif |
| 289 return button == 4 ? kWheelScrollAmount : -kWheelScrollAmount; |
| 264 } | 290 } |
| 265 | 291 |
| 266 int GetTouchId(const base::NativeEvent& xev) { | 292 int GetTouchId(const base::NativeEvent& xev) { |
| 267 float slot = 0; | 293 float slot = 0; |
| 268 ui::TouchFactory* factory = ui::TouchFactory::GetInstance(); | 294 ui::TouchFactory* factory = ui::TouchFactory::GetInstance(); |
| 269 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xev->xcookie.data); | 295 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xev->xcookie.data); |
| 270 if (!factory->IsRealTouchDevice(xievent->sourceid)) { | 296 if (!factory->IsRealTouchDevice(xievent->sourceid)) { |
| 271 // TODO(sad): Come up with a way to generate touch-ids for multi-touch | 297 // TODO(sad): Come up with a way to generate touch-ids for multi-touch |
| 272 // events when touch-events are generated from a mouse. | 298 // events when touch-events are generated from a mouse. |
| 273 return slot; | 299 return slot; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 unsigned int deviceid = | 336 unsigned int deviceid = |
| 311 static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid; | 337 static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid; |
| 312 // Force is normalized to fall into [0, 1] | 338 // Force is normalized to fall into [0, 1] |
| 313 if (!ui::TouchFactory::GetInstance()->NormalizeTouchParam( | 339 if (!ui::TouchFactory::GetInstance()->NormalizeTouchParam( |
| 314 deviceid, ui::TouchFactory::TP_PRESSURE, &force)) | 340 deviceid, ui::TouchFactory::TP_PRESSURE, &force)) |
| 315 force = 0.0; | 341 force = 0.0; |
| 316 return force; | 342 return force; |
| 317 } | 343 } |
| 318 | 344 |
| 319 } // namespace ui | 345 } // namespace ui |
| OLD | NEW |