1 /* 2 KWin - the KDE window manager 3 This file is part of the KDE project. 4 5 SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org> 6 7 SPDX-License-Identifier: GPL-2.0-or-later 8 */ 9 #ifndef KWIN_INPUT_EVENT_H 10 #define KWIN_INPUT_EVENT_H 11 12 #include "input.h" 13 14 #include <QInputEvent> 15 16 namespace KWin 17 { 18 19 namespace LibInput 20 { 21 class Device; 22 } 23 24 class MouseEvent : public QMouseEvent 25 { 26 public: 27 explicit MouseEvent(QEvent::Type type, const QPointF &pos, Qt::MouseButton button, Qt::MouseButtons buttons, 28 Qt::KeyboardModifiers modifiers, quint32 timestamp, 29 const QSizeF &delta, const QSizeF &deltaNonAccelerated, quint64 timestampMicroseconds, 30 LibInput::Device *device); 31 delta()32 QSizeF delta() const { 33 return m_delta; 34 } 35 deltaUnaccelerated()36 QSizeF deltaUnaccelerated() const { 37 return m_deltaUnccelerated; 38 } 39 timestampMicroseconds()40 quint64 timestampMicroseconds() const { 41 return m_timestampMicroseconds; 42 } 43 device()44 LibInput::Device *device() const { 45 return m_device; 46 } 47 modifiersRelevantForGlobalShortcuts()48 Qt::KeyboardModifiers modifiersRelevantForGlobalShortcuts() const { 49 return m_modifiersRelevantForShortcuts; 50 } 51 setModifiersRelevantForGlobalShortcuts(const Qt::KeyboardModifiers & mods)52 void setModifiersRelevantForGlobalShortcuts(const Qt::KeyboardModifiers &mods) { 53 m_modifiersRelevantForShortcuts = mods; 54 } 55 nativeButton()56 quint32 nativeButton() const { 57 return m_nativeButton; 58 } 59 setNativeButton(quint32 button)60 void setNativeButton(quint32 button) { 61 m_nativeButton = button; 62 } 63 64 private: 65 QSizeF m_delta; 66 QSizeF m_deltaUnccelerated; 67 quint64 m_timestampMicroseconds; 68 LibInput::Device *m_device; 69 Qt::KeyboardModifiers m_modifiersRelevantForShortcuts = Qt::KeyboardModifiers(); 70 quint32 m_nativeButton = 0; 71 }; 72 73 // TODO: Don't derive from QWheelEvent, this event is quite domain specific. 74 class WheelEvent : public QWheelEvent 75 { 76 public: 77 explicit WheelEvent(const QPointF &pos, qreal delta, qint32 discreteDelta, Qt::Orientation orientation, 78 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, InputRedirection::PointerAxisSource source, 79 quint32 timestamp, LibInput::Device *device); 80 orientation()81 Qt::Orientation orientation() const { 82 return m_orientation; 83 } 84 delta()85 qreal delta() const { 86 return m_delta; 87 } 88 discreteDelta()89 qint32 discreteDelta() const { 90 return m_discreteDelta; 91 } 92 axisSource()93 InputRedirection::PointerAxisSource axisSource() const { 94 return m_source; 95 } 96 device()97 LibInput::Device *device() const { 98 return m_device; 99 } 100 modifiersRelevantForGlobalShortcuts()101 Qt::KeyboardModifiers modifiersRelevantForGlobalShortcuts() const { 102 return m_modifiersRelevantForShortcuts; 103 } 104 setModifiersRelevantForGlobalShortcuts(const Qt::KeyboardModifiers & mods)105 void setModifiersRelevantForGlobalShortcuts(const Qt::KeyboardModifiers &mods) { 106 m_modifiersRelevantForShortcuts = mods; 107 } 108 109 private: 110 LibInput::Device *m_device; 111 Qt::Orientation m_orientation; 112 qreal m_delta; 113 qint32 m_discreteDelta; 114 InputRedirection::PointerAxisSource m_source; 115 Qt::KeyboardModifiers m_modifiersRelevantForShortcuts = Qt::KeyboardModifiers(); 116 }; 117 118 class KeyEvent : public QKeyEvent 119 { 120 public: 121 explicit KeyEvent(QEvent::Type type, Qt::Key key, Qt::KeyboardModifiers modifiers, quint32 code, quint32 keysym, 122 const QString &text, bool autorepeat, quint32 timestamp, LibInput::Device *device); 123 device()124 LibInput::Device *device() const { 125 return m_device; 126 } 127 modifiersRelevantForGlobalShortcuts()128 Qt::KeyboardModifiers modifiersRelevantForGlobalShortcuts() const { 129 return m_modifiersRelevantForShortcuts; 130 } 131 setModifiersRelevantForGlobalShortcuts(const Qt::KeyboardModifiers & mods)132 void setModifiersRelevantForGlobalShortcuts(const Qt::KeyboardModifiers &mods) { 133 m_modifiersRelevantForShortcuts = mods; 134 } 135 136 private: 137 LibInput::Device *m_device; 138 Qt::KeyboardModifiers m_modifiersRelevantForShortcuts = Qt::KeyboardModifiers(); 139 }; 140 141 class SwitchEvent : public QInputEvent 142 { 143 public: 144 enum class State { 145 Off, 146 On 147 }; 148 explicit SwitchEvent(State state, quint32 timestamp, quint64 timestampMicroseconds, LibInput::Device *device); 149 state()150 State state() const { 151 return m_state; 152 } 153 timestampMicroseconds()154 quint64 timestampMicroseconds() const { 155 return m_timestampMicroseconds; 156 } 157 device()158 LibInput::Device *device() const { 159 return m_device; 160 } 161 162 private: 163 State m_state; 164 quint64 m_timestampMicroseconds; 165 LibInput::Device *m_device; 166 }; 167 168 class TabletToolId 169 { 170 public: 171 const InputRedirection::TabletToolType m_toolType; 172 const QVector<InputRedirection::Capability> m_capabilities; 173 const quint64 m_serialId; 174 const quint64 m_uniqueId; 175 void *const m_deviceGroupData; 176 }; 177 178 class TabletPadId 179 { 180 public: 181 void *data; 182 }; 183 184 class TabletEvent : public QTabletEvent 185 { 186 public: 187 TabletEvent(Type t, const QPointF &pos, const QPointF &globalPos, 188 int device, int pointerType, qreal pressure, int xTilt, int yTilt, 189 qreal tangentialPressure, qreal rotation, int z, 190 Qt::KeyboardModifiers keyState, qint64 uniqueID, 191 Qt::MouseButton button, Qt::MouseButtons buttons, const TabletToolId &tabletId); 192 tabletId()193 const TabletToolId &tabletId() const { 194 return m_id; 195 } 196 197 private: 198 const TabletToolId m_id; 199 }; 200 201 } 202 203 #endif 204