| 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_modifiers_evdev.h" | 15 #include "ui/events/ozone/evdev/event_modifiers_evdev.h" |
| 16 #include "ui/events/ozone/evdev/keyboard_evdev.h" |
| 15 #include "ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h" | 17 #include "ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h" |
| 16 #include "ui/gfx/geometry/point_f.h" | 18 #include "ui/gfx/geometry/point_f.h" |
| 17 | 19 |
| 18 namespace ui { | 20 namespace ui { |
| 19 | 21 |
| 20 namespace { | 22 namespace { |
| 21 | 23 |
| 22 // Convert libevdev device class to libgestures device class. | 24 // Convert libevdev device class to libgestures device class. |
| 23 GestureInterpreterDeviceClass GestureDeviceClass(Evdev* evdev) { | 25 GestureInterpreterDeviceClass GestureDeviceClass(Evdev* evdev) { |
| 24 switch (evdev->info.evdev_class) { | 26 switch (evdev->info.evdev_class) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 const int kGestureScrollFingerCount = 2; | 76 const int kGestureScrollFingerCount = 2; |
| 75 | 77 |
| 76 // Number of fingers for swipe gestures. | 78 // Number of fingers for swipe gestures. |
| 77 const int kGestureSwipeFingerCount = 3; | 79 const int kGestureSwipeFingerCount = 3; |
| 78 | 80 |
| 79 } // namespace | 81 } // namespace |
| 80 | 82 |
| 81 GestureInterpreterLibevdevCros::GestureInterpreterLibevdevCros( | 83 GestureInterpreterLibevdevCros::GestureInterpreterLibevdevCros( |
| 82 EventModifiersEvdev* modifiers, | 84 EventModifiersEvdev* modifiers, |
| 83 CursorDelegateEvdev* cursor, | 85 CursorDelegateEvdev* cursor, |
| 86 KeyboardEvdev* keyboard, |
| 84 const EventDispatchCallback& callback) | 87 const EventDispatchCallback& callback) |
| 85 : modifiers_(modifiers), | 88 : modifiers_(modifiers), |
| 86 cursor_(cursor), | 89 cursor_(cursor), |
| 90 keyboard_(keyboard), |
| 87 dispatch_callback_(callback), | 91 dispatch_callback_(callback), |
| 88 interpreter_(NULL) {} | 92 interpreter_(NULL) { |
| 93 memset(&prev_key_state_, 0, sizeof(prev_key_state_)); |
| 94 } |
| 89 | 95 |
| 90 GestureInterpreterLibevdevCros::~GestureInterpreterLibevdevCros() { | 96 GestureInterpreterLibevdevCros::~GestureInterpreterLibevdevCros() { |
| 91 if (interpreter_) { | 97 if (interpreter_) { |
| 92 DeleteGestureInterpreter(interpreter_); | 98 DeleteGestureInterpreter(interpreter_); |
| 93 interpreter_ = NULL; | 99 interpreter_ = NULL; |
| 94 } | 100 } |
| 95 } | 101 } |
| 96 | 102 |
| 97 void GestureInterpreterLibevdevCros::OnLibEvdevCrosOpen( | 103 void GestureInterpreterLibevdevCros::OnLibEvdevCrosOpen( |
| 98 Evdev* evdev, | 104 Evdev* evdev, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 111 GestureInterpreterSetTimerProvider( | 117 GestureInterpreterSetTimerProvider( |
| 112 interpreter_, | 118 interpreter_, |
| 113 const_cast<GesturesTimerProvider*>(&kGestureTimerProvider), | 119 const_cast<GesturesTimerProvider*>(&kGestureTimerProvider), |
| 114 this); | 120 this); |
| 115 GestureInterpreterSetCallback(interpreter_, OnGestureReadyHelper, this); | 121 GestureInterpreterSetCallback(interpreter_, OnGestureReadyHelper, this); |
| 116 } | 122 } |
| 117 | 123 |
| 118 void GestureInterpreterLibevdevCros::OnLibEvdevCrosEvent(Evdev* evdev, | 124 void GestureInterpreterLibevdevCros::OnLibEvdevCrosEvent(Evdev* evdev, |
| 119 EventStateRec* evstate, | 125 EventStateRec* evstate, |
| 120 const timeval& time) { | 126 const timeval& time) { |
| 127 // If the device has keys no it, dispatch any presses/release. |
| 128 DispatchChangedKeys(evdev, time); |
| 129 |
| 121 HardwareState hwstate; | 130 HardwareState hwstate; |
| 122 memset(&hwstate, 0, sizeof(hwstate)); | 131 memset(&hwstate, 0, sizeof(hwstate)); |
| 123 hwstate.timestamp = StimeFromTimeval(&time); | 132 hwstate.timestamp = StimeFromTimeval(&time); |
| 124 | 133 |
| 125 // Mouse. | 134 // Mouse. |
| 126 hwstate.rel_x = evstate->rel_x; | 135 hwstate.rel_x = evstate->rel_x; |
| 127 hwstate.rel_y = evstate->rel_y; | 136 hwstate.rel_y = evstate->rel_y; |
| 128 hwstate.rel_wheel = evstate->rel_wheel; | 137 hwstate.rel_wheel = evstate->rel_wheel; |
| 129 hwstate.rel_hwheel = evstate->rel_hwheel; | 138 hwstate.rel_hwheel = evstate->rel_hwheel; |
| 130 | 139 |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 void GestureInterpreterLibevdevCros::DispatchMouseButton(unsigned int modifier, | 397 void GestureInterpreterLibevdevCros::DispatchMouseButton(unsigned int modifier, |
| 389 bool down) { | 398 bool down) { |
| 390 const gfx::PointF& loc = cursor_->location(); | 399 const gfx::PointF& loc = cursor_->location(); |
| 391 int flag = modifiers_->GetEventFlagFromModifier(modifier); | 400 int flag = modifiers_->GetEventFlagFromModifier(modifier); |
| 392 EventType type = (down ? ET_MOUSE_PRESSED : ET_MOUSE_RELEASED); | 401 EventType type = (down ? ET_MOUSE_PRESSED : ET_MOUSE_RELEASED); |
| 393 modifiers_->UpdateModifier(modifier, down); | 402 modifiers_->UpdateModifier(modifier, down); |
| 394 MouseEvent event(type, loc, loc, modifiers_->GetModifierFlags() | flag, flag); | 403 MouseEvent event(type, loc, loc, modifiers_->GetModifierFlags() | flag, flag); |
| 395 Dispatch(&event); | 404 Dispatch(&event); |
| 396 } | 405 } |
| 397 | 406 |
| 407 void GestureInterpreterLibevdevCros::DispatchChangedKeys(Evdev* evdev, |
| 408 const timeval& time) { |
| 409 unsigned long key_state_diff[EVDEV_BITS_TO_LONGS(KEY_CNT)]; |
| 410 |
| 411 // Find changed keys. |
| 412 for (unsigned long i = 0; i < arraysize(key_state_diff); ++i) |
| 413 key_state_diff[i] = evdev->key_state_bitmask[i] ^ prev_key_state_[i]; |
| 414 |
| 415 // Dispatch events for changed keys. |
| 416 for (unsigned long i = 0; i < KEY_CNT; ++i) { |
| 417 if (EvdevBitIsSet(key_state_diff, i)) { |
| 418 bool value = EvdevBitIsSet(evdev->key_state_bitmask, i); |
| 419 keyboard_->OnKeyChange(i, value); |
| 420 } |
| 421 } |
| 422 |
| 423 // Update internal key state. |
| 424 for (unsigned long i = 0; i < EVDEV_BITS_TO_LONGS(KEY_CNT); ++i) |
| 425 prev_key_state_[i] = evdev->key_state_bitmask[i]; |
| 426 } |
| 427 |
| 398 } // namespace ui | 428 } // namespace ui |
| OLD | NEW |