1 | /* |
2 | This file is part of the KDE project |
3 | SPDX-FileCopyrightText: 2021 Steffen Hartleib <steffenhartleib@t-online.de> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.1-or-later |
6 | */ |
7 | |
8 | #ifndef KTWOFINGERSWIPE_H |
9 | #define KTWOFINGERSWIPE_H |
10 | |
11 | #include <kwidgetsaddons_export.h> |
12 | |
13 | #include <QGesture> |
14 | #include <QGestureRecognizer> |
15 | #include <memory> |
16 | |
17 | /** |
18 | * @class KTwoFingerSwipe ktwofingerswipe.h KTwoFingerSwipe |
19 | * |
20 | * @short A two finger swipe gesture. |
21 | * |
22 | * Provides a class for a two finger swipe gesture. |
23 | * |
24 | * Note: The QGestureManager need a QMainwindow, to delivery the gesture. |
25 | * |
26 | * @since 5.83 |
27 | * @author Steffen Hartleib <steffenhartleib@t-online.de> |
28 | */ |
29 | class KWIDGETSADDONS_EXPORT KTwoFingerSwipe : public QGesture |
30 | { |
31 | Q_OBJECT |
32 | Q_PROPERTY(QPointF pos READ pos WRITE setPos) |
33 | Q_PROPERTY(QPointF screenPos READ screenPos WRITE setScreenPos) |
34 | Q_PROPERTY(QPointF scenePos READ scenePos WRITE setScenePos) |
35 | Q_PROPERTY(qreal swipeAngle READ swipeAngle WRITE setSwipeAngle) |
36 | public: |
37 | /** |
38 | * The constructor. |
39 | */ |
40 | explicit KTwoFingerSwipe(QObject *parent = nullptr); |
41 | |
42 | /** |
43 | * Destructor |
44 | */ |
45 | ~KTwoFingerSwipe() override; |
46 | |
47 | /** |
48 | * The start position of the gesture, relative to the widget that received the gesture. |
49 | * |
50 | * Note: This is not necessarily the same position as in the widget that grabGesture() uses. |
51 | * |
52 | * @return The start position of the gesture, relative to the widget. |
53 | */ |
54 | Q_REQUIRED_RESULT QPointF pos() const; |
55 | |
56 | /** |
57 | * Sets the position, relative to the widget. |
58 | * |
59 | * @param pos The position. |
60 | */ |
61 | void setPos(QPointF pos); |
62 | |
63 | /** |
64 | * @return The start screen position of the gesture. |
65 | */ |
66 | Q_REQUIRED_RESULT QPointF screenPos() const; |
67 | |
68 | /** |
69 | * Sets the screen position. |
70 | * |
71 | * @param screenPos The screen position. |
72 | */ |
73 | void setScreenPos(QPointF screenPos); |
74 | |
75 | /** |
76 | * @return The start scene position of the gesture. |
77 | */ |
78 | Q_REQUIRED_RESULT QPointF scenePos() const; |
79 | |
80 | /** |
81 | * Sets the scene position. |
82 | * |
83 | * @param scenePos The scene position, identical to the screen position for widgets. |
84 | */ |
85 | void setScenePos(QPointF scenePos); |
86 | |
87 | /** |
88 | * @return The angle of the swipe gesture. |
89 | */ |
90 | Q_REQUIRED_RESULT qreal swipeAngle() const; |
91 | |
92 | /** |
93 | * Sets the angle of the swipe gesture |
94 | * |
95 | * @param swipeAngle The angle. |
96 | */ |
97 | void setSwipeAngle(qreal swipeAngle); |
98 | private: |
99 | std::unique_ptr<class KTwoFingerSwipePrivate> const d; |
100 | }; |
101 | |
102 | /** |
103 | * @class KTwoFingerSwipeRecognizer ktwofingerswiperecognizer.h KTwoFingerSwipeRecognizer |
104 | * |
105 | * @short The recognizer for a two finger swipe gesture. |
106 | * |
107 | * Provides the recognizer for a two finger swipe gesture. To adjust the maximum swipe time |
108 | * and the minimum swipe distance, for a valid swipe gesture: |
109 | * @see setMaxSwipeTime |
110 | * @see setSwipeDistance |
111 | * |
112 | * @since 5.83 |
113 | * @author Steffen Hartleib <steffenhartleib@t-online.de> |
114 | */ |
115 | class KWIDGETSADDONS_EXPORT KTwoFingerSwipeRecognizer : public QGestureRecognizer |
116 | { |
117 | public: |
118 | /** |
119 | * The constructor. |
120 | */ |
121 | KTwoFingerSwipeRecognizer(); |
122 | |
123 | /** |
124 | * Destructor |
125 | */ |
126 | ~KTwoFingerSwipeRecognizer() override; |
127 | |
128 | /** |
129 | * Qt called this member to create a new QGesture object. |
130 | * |
131 | * @param target The target for the gesture. |
132 | * |
133 | * @return The new QGesture object. |
134 | */ |
135 | QGesture* create(QObject *target) override; |
136 | |
137 | /** |
138 | * Handles the given event for the watched object and update the gesture object. |
139 | * |
140 | * @param gesture The gesture object. |
141 | * @param watched The watched object. |
142 | * @param event The event. |
143 | * |
144 | * @return The result reflects how much of the gesture has been recognized. |
145 | */ |
146 | Result recognize(QGesture *gesture, QObject *watched, QEvent *event) override; |
147 | |
148 | /** |
149 | * @return The maximum duration for the swipe gesture, in milliseconds. |
150 | */ |
151 | Q_REQUIRED_RESULT int maxSwipeTime() const; |
152 | |
153 | /** |
154 | * Set the maximum duration of the swipe gesture. If @param i is negative, it will be set to null. |
155 | * |
156 | * @param i The maximum duration in milliseconds. |
157 | */ |
158 | void setMaxSwipeTime(int i); |
159 | |
160 | /** |
161 | * @return The minimum distance for the swipe gesture. |
162 | */ |
163 | Q_REQUIRED_RESULT int minSswipeDistance() const; |
164 | |
165 | /** |
166 | * Set the minimum distance of the swipe gesture. If @param i is negative, it will be set to null. |
167 | * |
168 | * @param i The minimum distance. |
169 | */ |
170 | void setSwipeDistance(int i); |
171 | |
172 | private: |
173 | std::unique_ptr<class KTwoFingerSwipeRecognizerPrivate> const d; |
174 | Q_DISABLE_COPY(KTwoFingerSwipeRecognizer) |
175 | }; |
176 | |
177 | #endif |
178 | |