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

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

Issue 654073002: ozone: evdev: Dispatch key events from gestures devices (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mismerge 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
« no previous file with comments | « ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_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
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
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
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
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698