KWin
Loading...
Searching...
No Matches
events.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#pragma once
10
11#include "input.h"
12
13#include <libinput.h>
14
15namespace KWin
16{
17namespace LibInput
18{
19
20class Device;
21
22class Event
23{
24public:
25 virtual ~Event();
26
27 libinput_event_type type() const;
28 Device *device() const;
30
31 operator libinput_event *()
32 {
33 return m_event;
34 }
35 operator libinput_event *() const
36 {
37 return m_event;
38 }
39
40 static std::unique_ptr<Event> create(libinput_event *event);
41
42protected:
43 Event(libinput_event *event, libinput_event_type type);
44
45private:
46 libinput_event *m_event;
47 libinput_event_type m_type;
48 mutable Device *m_device;
49};
50
51class KeyEvent : public Event
52{
53public:
55 ~KeyEvent() override;
56
57 uint32_t key() const;
59 std::chrono::microseconds time() const;
60
62 {
63 return m_keyboardEvent;
64 }
65 operator libinput_event_keyboard *() const
66 {
67 return m_keyboardEvent;
68 }
69
70private:
71 libinput_event_keyboard *m_keyboardEvent;
72};
73
74class PointerEvent : public Event
75{
76public:
77 PointerEvent(libinput_event *event, libinput_event_type type);
78 ~PointerEvent() override;
79
80 QPointF absolutePos() const;
81 QPointF absolutePos(const QSize &size) const;
82 QPointF delta() const;
83 QPointF deltaUnaccelerated() const;
84 uint32_t button() const;
86 std::chrono::microseconds time() const;
87 QList<InputRedirection::PointerAxis> axis() const;
90
92 {
93 return m_pointerEvent;
94 }
95 operator libinput_event_pointer *() const
96 {
97 return m_pointerEvent;
98 }
99
100private:
101 libinput_event_pointer *m_pointerEvent;
102};
103
104class TouchEvent : public Event
105{
106public:
107 TouchEvent(libinput_event *event, libinput_event_type type);
108 ~TouchEvent() override;
109
110 std::chrono::microseconds time() const;
111 QPointF absolutePos() const;
112 QPointF absolutePos(const QSize &size) const;
113 qint32 id() const;
114
116 {
117 return m_touchEvent;
118 }
119 operator libinput_event_touch *() const
120 {
121 return m_touchEvent;
122 }
123
124private:
125 libinput_event_touch *m_touchEvent;
126};
127
128class GestureEvent : public Event
129{
130public:
131 ~GestureEvent() override;
132
133 std::chrono::microseconds time() const;
134 int fingerCount() const;
135
136 QPointF delta() const;
137
138 bool isCancelled() const;
139
141 {
142 return m_gestureEvent;
143 }
144 operator libinput_event_gesture *() const
145 {
146 return m_gestureEvent;
147 }
148
149protected:
150 GestureEvent(libinput_event *event, libinput_event_type type);
152};
153
155{
156public:
157 PinchGestureEvent(libinput_event *event, libinput_event_type type);
159
160 qreal scale() const;
161 qreal angleDelta() const;
162};
163
165{
166public:
167 SwipeGestureEvent(libinput_event *event, libinput_event_type type);
169};
170
172{
173public:
174 HoldGestureEvent(libinput_event *event, libinput_event_type type);
176};
177
178class SwitchEvent : public Event
179{
180public:
181 SwitchEvent(libinput_event *event, libinput_event_type type);
182 ~SwitchEvent() override;
183
184 enum class State {
185 Off,
186 On
187 };
188 State state() const;
189
190 std::chrono::microseconds time() const;
191
192private:
193 libinput_event_switch *m_switchEvent;
194};
195
196class TabletToolEvent : public Event
197{
198public:
199 TabletToolEvent(libinput_event *event, libinput_event_type type);
200
201 std::chrono::microseconds time() const
202 {
203 return std::chrono::microseconds(libinput_event_tablet_tool_get_time_usec(m_tabletToolEvent));
204 }
205 bool xHasChanged() const
206 {
207 return libinput_event_tablet_tool_x_has_changed(m_tabletToolEvent);
208 }
209 bool yHasChanged() const
210 {
211 return libinput_event_tablet_tool_y_has_changed(m_tabletToolEvent);
212 }
214 {
215 return libinput_event_tablet_tool_pressure_has_changed(m_tabletToolEvent);
216 }
218 {
219 return libinput_event_tablet_tool_distance_has_changed(m_tabletToolEvent);
220 }
221 bool tiltXHasChanged() const
222 {
223 return libinput_event_tablet_tool_tilt_x_has_changed(m_tabletToolEvent);
224 }
225 bool tiltYHasChanged() const
226 {
227 return libinput_event_tablet_tool_tilt_y_has_changed(m_tabletToolEvent);
228 }
230 {
231 return libinput_event_tablet_tool_rotation_has_changed(m_tabletToolEvent);
232 }
233 bool sliderHasChanged() const
234 {
235 return libinput_event_tablet_tool_slider_has_changed(m_tabletToolEvent);
236 }
237
238 // uncomment when depending on libinput 1.14 or when implementing totems
239 // bool sizeMajorHasChanged() const { return
240 // libinput_event_tablet_tool_size_major_has_changed(m_tabletToolEvent); } bool
241 // sizeMinorHasChanged() const { return
242 // libinput_event_tablet_tool_size_minor_has_changed(m_tabletToolEvent); }
243 bool wheelHasChanged() const
244 {
245 return libinput_event_tablet_tool_wheel_has_changed(m_tabletToolEvent);
246 }
247 QPointF position() const
248 {
249 return {libinput_event_tablet_tool_get_x(m_tabletToolEvent),
250 libinput_event_tablet_tool_get_y(m_tabletToolEvent)};
251 }
252 QPointF delta() const
253 {
254 return {libinput_event_tablet_tool_get_dx(m_tabletToolEvent),
255 libinput_event_tablet_tool_get_dy(m_tabletToolEvent)};
256 }
257 qreal pressure() const
258 {
259 return libinput_event_tablet_tool_get_pressure(m_tabletToolEvent);
260 }
261 qreal distance() const
262 {
263 return libinput_event_tablet_tool_get_distance(m_tabletToolEvent);
264 }
265 int xTilt() const
266 {
267 return libinput_event_tablet_tool_get_tilt_x(m_tabletToolEvent);
268 }
269 int yTilt() const
270 {
271 return libinput_event_tablet_tool_get_tilt_y(m_tabletToolEvent);
272 }
273 qreal rotation() const
274 {
275 return libinput_event_tablet_tool_get_rotation(m_tabletToolEvent);
276 }
277 qreal sliderPosition() const
278 {
279 return libinput_event_tablet_tool_get_slider_position(m_tabletToolEvent);
280 }
281 // Uncomment when depending on libinput 1.14 or when implementing totems
282 // qreal sizeMajor() const { return
283 // libinput_event_tablet_tool_get_size_major(m_tabletToolEvent); }
284 // qreal sizeMinor() const {
285 // return libinput_event_tablet_tool_get_size_minor(m_tabletToolEvent); }
286 qreal wheelDelta() const
287 {
288 return libinput_event_tablet_tool_get_wheel_delta(m_tabletToolEvent);
289 }
291 {
292 return libinput_event_tablet_tool_get_wheel_delta_discrete(m_tabletToolEvent);
293 }
294
295 bool isTipDown() const
296 {
297 const auto state = libinput_event_tablet_tool_get_tip_state(m_tabletToolEvent);
298 return state == LIBINPUT_TABLET_TOOL_TIP_DOWN;
299 }
300 bool isNearby() const
301 {
302 const auto state = libinput_event_tablet_tool_get_proximity_state(m_tabletToolEvent);
303 return state == LIBINPUT_TABLET_TOOL_PROXIMITY_STATE_IN;
304 }
305
306 QPointF transformedPosition(const QSize &size) const;
307
308 struct libinput_tablet_tool *tool()
309 {
310 return libinput_event_tablet_tool_get_tool(m_tabletToolEvent);
311 }
312
313private:
314 libinput_event_tablet_tool *m_tabletToolEvent;
315};
316
318{
319public:
320 TabletToolButtonEvent(libinput_event *event, libinput_event_type type);
321
322 uint buttonId() const
323 {
324 return libinput_event_tablet_tool_get_button(m_tabletToolEvent);
325 }
326
327 bool isButtonPressed() const
328 {
329 const auto state = libinput_event_tablet_tool_get_button_state(m_tabletToolEvent);
330 return state == LIBINPUT_BUTTON_STATE_PRESSED;
331 }
332
333 struct libinput_tablet_tool *tool()
334 {
335 return libinput_event_tablet_tool_get_tool(m_tabletToolEvent);
336 }
337
338 std::chrono::microseconds time() const
339 {
340 return std::chrono::microseconds(libinput_event_tablet_tool_get_time_usec(m_tabletToolEvent));
341 }
342
343private:
344 libinput_event_tablet_tool *m_tabletToolEvent;
345};
346
348{
349public:
350 TabletPadRingEvent(libinput_event *event, libinput_event_type type);
351
352 int position() const
353 {
354 return libinput_event_tablet_pad_get_ring_position(m_tabletPadEvent);
355 }
356 int number() const
357 {
358 return libinput_event_tablet_pad_get_ring_number(m_tabletPadEvent);
359 }
360 libinput_tablet_pad_ring_axis_source source() const
361 {
362 return libinput_event_tablet_pad_get_ring_source(m_tabletPadEvent);
363 }
364 std::chrono::microseconds time() const
365 {
366 return std::chrono::microseconds(libinput_event_tablet_pad_get_time_usec(m_tabletPadEvent));
367 }
368
369private:
370 libinput_event_tablet_pad *m_tabletPadEvent;
371};
372
374{
375public:
376 TabletPadStripEvent(libinput_event *event, libinput_event_type type);
377
378 int position() const
379 {
380 return libinput_event_tablet_pad_get_strip_position(m_tabletPadEvent);
381 }
382 int number() const
383 {
384 return libinput_event_tablet_pad_get_strip_number(m_tabletPadEvent);
385 }
386 libinput_tablet_pad_strip_axis_source source() const
387 {
388 return libinput_event_tablet_pad_get_strip_source(m_tabletPadEvent);
389 }
390 std::chrono::microseconds time() const
391 {
392 return std::chrono::microseconds(libinput_event_tablet_pad_get_time_usec(m_tabletPadEvent));
393 }
394
395private:
396 libinput_event_tablet_pad *m_tabletPadEvent;
397};
398
400{
401public:
402 TabletPadButtonEvent(libinput_event *event, libinput_event_type type);
403
404 uint buttonId() const
405 {
406 return libinput_event_tablet_pad_get_button_number(m_tabletPadEvent);
407 }
408 bool isButtonPressed() const
409 {
410 const auto state = libinput_event_tablet_pad_get_button_state(m_tabletPadEvent);
411 return state == LIBINPUT_BUTTON_STATE_PRESSED;
412 }
413 std::chrono::microseconds time() const
414 {
415 return std::chrono::microseconds(libinput_event_tablet_pad_get_time_usec(m_tabletPadEvent));
416 }
417
418private:
419 libinput_event_tablet_pad *m_tabletPadEvent;
420};
421
422inline libinput_event_type Event::type() const
423{
424 return m_type;
425}
426
427}
428}
static std::unique_ptr< Event > create(libinput_event *event)
Definition events.cpp:19
libinput_event_type type() const
Definition events.h:422
Device * device() const
Definition events.cpp:85
Event(libinput_event *event, libinput_event_type type)
Definition events.cpp:73
libinput_device * nativeDevice() const
Definition events.cpp:93
std::chrono::microseconds time() const
Definition events.cpp:259
GestureEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:251
libinput_event_gesture * m_gestureEvent
Definition events.h:151
HoldGestureEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:304
uint32_t key() const
Definition events.cpp:109
InputRedirection::KeyboardKeyState state() const
Definition events.cpp:114
KeyEvent(libinput_event *event)
Definition events.cpp:101
std::chrono::microseconds time() const
Definition events.cpp:126
PinchGestureEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:280
std::chrono::microseconds time() const
Definition events.cpp:165
QPointF absolutePos() const
Definition events.cpp:139
qint32 scrollValueV120(InputRedirection::PointerAxis axis) const
Definition events.cpp:209
InputRedirection::PointerButtonState buttonState() const
Definition events.cpp:176
QPointF deltaUnaccelerated() const
Definition events.cpp:159
QList< InputRedirection::PointerAxis > axis() const
Definition events.cpp:189
uint32_t button() const
Definition events.cpp:170
qreal scrollValue(InputRedirection::PointerAxis a) const
Definition events.cpp:201
PointerEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:131
SwipeGestureEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:297
std::chrono::microseconds time() const
Definition events.cpp:332
SwitchEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:311
std::chrono::microseconds time() const
Definition events.h:413
TabletPadButtonEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:356
libinput_tablet_pad_ring_axis_source source() const
Definition events.h:360
std::chrono::microseconds time() const
Definition events.h:364
TabletPadRingEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:368
libinput_tablet_pad_strip_axis_source source() const
Definition events.h:386
std::chrono::microseconds time() const
Definition events.h:390
TabletPadStripEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:362
std::chrono::microseconds time() const
Definition events.h:338
struct libinput_tablet_tool * tool()
Definition events.h:333
TabletToolButtonEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:350
bool distanceHasChanged() const
Definition events.h:217
bool rotationHasChanged() const
Definition events.h:229
std::chrono::microseconds time() const
Definition events.h:201
bool pressureHasChanged() const
Definition events.h:213
struct libinput_tablet_tool * tool()
Definition events.h:308
QPointF transformedPosition(const QSize &size) const
Definition events.cpp:343
TabletToolEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:337
std::chrono::microseconds time() const
Definition events.cpp:225
TouchEvent(libinput_event *event, libinput_event_type type)
Definition events.cpp:217
QPointF absolutePos() const
Definition events.cpp:230