File indexing completed on 2024-05-12 05:31:21

0001 /*
0002     SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org>
0003     SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include "input.h"
0011 #include "kwin_export.h"
0012 
0013 #include <QObject>
0014 
0015 namespace KWin
0016 {
0017 
0018 /**
0019  * The InputDevice class represents an input device, e.g. a mouse, or a keyboard, etc.
0020  */
0021 class KWIN_EXPORT InputDevice : public QObject
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     explicit InputDevice(QObject *parent = nullptr);
0027 
0028     virtual QString sysName() const = 0;
0029     virtual QString name() const = 0;
0030 
0031     virtual bool isEnabled() const = 0;
0032     virtual void setEnabled(bool enabled) = 0;
0033 
0034     virtual LEDs leds() const = 0;
0035     virtual void setLeds(LEDs leds) = 0;
0036 
0037     virtual bool isKeyboard() const = 0;
0038     virtual bool isAlphaNumericKeyboard() const = 0;
0039     virtual bool isPointer() const = 0;
0040     virtual bool isTouchpad() const = 0;
0041     virtual bool isTouch() const = 0;
0042     virtual bool isTabletTool() const = 0;
0043     virtual bool isTabletPad() const = 0;
0044     virtual bool isTabletModeSwitch() const = 0;
0045     virtual bool isLidSwitch() const = 0;
0046 
0047     virtual QString outputName() const;
0048     virtual void setOutputName(const QString &outputName);
0049 
0050     virtual bool isNaturalScroll() const;
0051 
0052 Q_SIGNALS:
0053     void keyChanged(quint32 key, InputRedirection::KeyboardKeyState, std::chrono::microseconds time, InputDevice *device);
0054     void pointerButtonChanged(quint32 button, InputRedirection::PointerButtonState state, std::chrono::microseconds time, InputDevice *device);
0055     void pointerMotionAbsolute(const QPointF &position, std::chrono::microseconds time, InputDevice *device);
0056     void pointerMotion(const QPointF &delta, const QPointF &deltaNonAccelerated, std::chrono::microseconds time, InputDevice *device);
0057     void pointerAxisChanged(InputRedirection::PointerAxis axis, qreal delta, qint32 deltaV120,
0058                             InputRedirection::PointerAxisSource source, std::chrono::microseconds time, InputDevice *device);
0059     void pointerFrame(InputDevice *device);
0060     void touchFrame(InputDevice *device);
0061     void touchCanceled(InputDevice *device);
0062     void touchDown(qint32 id, const QPointF &absolutePos, std::chrono::microseconds time, InputDevice *device);
0063     void touchUp(qint32 id, std::chrono::microseconds time, InputDevice *device);
0064     void touchMotion(qint32 id, const QPointF &absolutePos, std::chrono::microseconds time, InputDevice *device);
0065     void swipeGestureBegin(int fingerCount, std::chrono::microseconds time, InputDevice *device);
0066     void swipeGestureUpdate(const QPointF &delta, std::chrono::microseconds time, InputDevice *device);
0067     void swipeGestureEnd(std::chrono::microseconds time, InputDevice *device);
0068     void swipeGestureCancelled(std::chrono::microseconds time, InputDevice *device);
0069     void pinchGestureBegin(int fingerCount, std::chrono::microseconds time, InputDevice *device);
0070     void pinchGestureUpdate(qreal scale, qreal angleDelta, const QPointF &delta, std::chrono::microseconds time, InputDevice *device);
0071     void pinchGestureEnd(std::chrono::microseconds time, InputDevice *device);
0072     void pinchGestureCancelled(std::chrono::microseconds time, InputDevice *device);
0073     void holdGestureBegin(int fingerCount, std::chrono::microseconds time, InputDevice *device);
0074     void holdGestureEnd(std::chrono::microseconds time, InputDevice *device);
0075     void holdGestureCancelled(std::chrono::microseconds time, InputDevice *device);
0076     void switchToggledOn(std::chrono::microseconds time, InputDevice *device);
0077     void switchToggledOff(std::chrono::microseconds time, InputDevice *device);
0078 
0079     void tabletToolEvent(InputRedirection::TabletEventType type, const QPointF &pos,
0080                          qreal pressure, int xTilt, int yTilt, qreal rotation, bool tipDown,
0081                          bool tipNear, const TabletToolId &tabletToolId, std::chrono::microseconds time);
0082     void tabletToolButtonEvent(uint button, bool isPressed, const TabletToolId &tabletToolId, std::chrono::microseconds time);
0083 
0084     void tabletPadButtonEvent(uint button, bool isPressed, const TabletPadId &tabletPadId, std::chrono::microseconds time);
0085     void tabletPadStripEvent(int number, int position, bool isFinger, const TabletPadId &tabletPadId, std::chrono::microseconds time);
0086     void tabletPadRingEvent(int number, int position, bool isFinger, const TabletPadId &tabletPadId, std::chrono::microseconds time);
0087 };
0088 
0089 } // namespace KWin