| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ui/base/events.h" | |
| 6 | |
| 7 #include <linux/input.h> | |
| 8 #include <X11/extensions/XInput2.h> | |
| 9 | |
| 10 #include "base/event_types.h" | |
| 11 #include "base/logging.h" | |
| 12 #include "ui/base/keycodes/keyboard_code_conversion_x.h" | |
| 13 #include "ui/gfx/point.h" | |
| 14 | |
| 15 using namespace base::wayland; | |
| 16 | |
| 17 namespace ui { | |
| 18 | |
| 19 // These are the mouse events expected. The event type Wayland sends is an | |
| 20 // evdev event. The following is the correct mapping from evdev to expected | |
| 21 // events type. | |
| 22 enum WaylandEventButtonType { | |
| 23 LEFT_BUTTON = BTN_LEFT, | |
| 24 MIDDLE_BUTTON = BTN_RIGHT, | |
| 25 RIGHT_BUTTON = BTN_MIDDLE, | |
| 26 SCROLL_UP = BTN_SIDE, | |
| 27 SCROLL_DOWN = BTN_EXTRA, | |
| 28 }; | |
| 29 | |
| 30 } // namespace ui | |
| 31 | |
| 32 namespace { | |
| 33 | |
| 34 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+. | |
| 35 static int kWheelScrollAmount = 53; | |
| 36 | |
| 37 int GetEventFlagsFromState(unsigned int state) { | |
| 38 int flags = 0; | |
| 39 if (state & ControlMask) | |
| 40 flags |= ui::EF_CONTROL_DOWN; | |
| 41 if (state & ShiftMask) | |
| 42 flags |= ui::EF_SHIFT_DOWN; | |
| 43 if (state & Mod1Mask) | |
| 44 flags |= ui::EF_ALT_DOWN; | |
| 45 if (state & LockMask) | |
| 46 flags |= ui::EF_CAPS_LOCK_DOWN; | |
| 47 if (state & Button1Mask) | |
| 48 flags |= ui::EF_LEFT_MOUSE_BUTTON; | |
| 49 if (state & Button2Mask) | |
| 50 flags |= ui::EF_MIDDLE_MOUSE_BUTTON; | |
| 51 if (state & Button3Mask) | |
| 52 flags |= ui::EF_RIGHT_MOUSE_BUTTON; | |
| 53 | |
| 54 return flags; | |
| 55 } | |
| 56 | |
| 57 int GetButtonEventFlagsFromNativeEvent(const base::NativeEvent& native_event) { | |
| 58 // TODO(dnicoara): Need to add double click. | |
| 59 int flags = 0; | |
| 60 switch (native_event->button.button) { | |
| 61 case ui::LEFT_BUTTON: | |
| 62 return flags | ui::EF_LEFT_MOUSE_BUTTON; | |
| 63 case ui::MIDDLE_BUTTON: | |
| 64 return flags | ui::EF_MIDDLE_MOUSE_BUTTON; | |
| 65 case ui::RIGHT_BUTTON: | |
| 66 return flags | ui::EF_RIGHT_MOUSE_BUTTON; | |
| 67 } | |
| 68 return flags; | |
| 69 } | |
| 70 | |
| 71 } // namespace | |
| 72 | |
| 73 namespace ui { | |
| 74 | |
| 75 EventType EventTypeFromNative(const base::NativeEvent& native_event) { | |
| 76 switch (native_event->type) { | |
| 77 case WAYLAND_BUTTON: | |
| 78 switch (native_event->button.button) { | |
| 79 case LEFT_BUTTON: | |
| 80 case RIGHT_BUTTON: | |
| 81 case MIDDLE_BUTTON: | |
| 82 return native_event->button.state ? ET_MOUSE_PRESSED | |
| 83 : ET_MOUSE_RELEASED; | |
| 84 case SCROLL_UP: | |
| 85 case SCROLL_DOWN: | |
| 86 return ET_MOUSEWHEEL; | |
| 87 default: | |
| 88 break; | |
| 89 } | |
| 90 break; | |
| 91 case WAYLAND_KEY: | |
| 92 return native_event->key.state ? ET_KEY_PRESSED : ET_KEY_RELEASED; | |
| 93 case WAYLAND_MOTION: | |
| 94 return ET_MOUSE_MOVED; | |
| 95 case WAYLAND_POINTER_FOCUS: | |
| 96 return native_event->pointer_focus.state ? ET_MOUSE_ENTERED | |
| 97 : ET_MOUSE_EXITED; | |
| 98 case WAYLAND_KEYBOARD_FOCUS: | |
| 99 return ET_UNKNOWN; | |
| 100 default: | |
| 101 break; | |
| 102 } | |
| 103 return ET_UNKNOWN; | |
| 104 } | |
| 105 | |
| 106 int EventFlagsFromNative(const base::NativeEvent& native_event) { | |
| 107 switch (native_event->type) { | |
| 108 case WAYLAND_BUTTON: | |
| 109 return GetButtonEventFlagsFromNativeEvent(native_event) | | |
| 110 GetEventFlagsFromState(native_event->button.modifiers); | |
| 111 case WAYLAND_KEY: | |
| 112 return GetEventFlagsFromState(native_event->key.modifiers); | |
| 113 case WAYLAND_MOTION: | |
| 114 return GetEventFlagsFromState(native_event->motion.modifiers); | |
| 115 case WAYLAND_KEYBOARD_FOCUS: | |
| 116 return GetEventFlagsFromState(native_event->keyboard_focus.modifiers); | |
| 117 default: | |
| 118 return 0; | |
| 119 } | |
| 120 } | |
| 121 | |
| 122 gfx::Point EventLocationFromNative(const base::NativeEvent& native_event) { | |
| 123 switch (native_event->type) { | |
| 124 case WAYLAND_BUTTON: | |
| 125 return gfx::Point(native_event->button.x, native_event->button.y); | |
| 126 case WAYLAND_MOTION: | |
| 127 return gfx::Point(native_event->motion.x, native_event->motion.y); | |
| 128 case WAYLAND_POINTER_FOCUS: | |
| 129 return gfx::Point(native_event->pointer_focus.x, | |
| 130 native_event->pointer_focus.y); | |
| 131 default: | |
| 132 return gfx::Point(); | |
| 133 } | |
| 134 } | |
| 135 | |
| 136 KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { | |
| 137 return KeyboardCodeFromXKeysym(native_event->key.sym); | |
| 138 } | |
| 139 | |
| 140 bool IsMouseEvent(const base::NativeEvent& native_event) { | |
| 141 return native_event->type == WAYLAND_BUTTON || | |
| 142 native_event->type == WAYLAND_MOTION || | |
| 143 native_event->type == WAYLAND_POINTER_FOCUS; | |
| 144 } | |
| 145 | |
| 146 int GetMouseWheelOffset(const base::NativeEvent& native_event) { | |
| 147 return native_event->button.button == SCROLL_UP ? | |
| 148 kWheelScrollAmount : -kWheelScrollAmount; | |
| 149 } | |
| 150 | |
| 151 } // namespace ui | |
| OLD | NEW |