1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QGESTURE_H
5#define QGESTURE_H
6
7#include <QtWidgets/qtwidgetsglobal.h>
8#include <QtCore/qobject.h>
9#include <QtCore/qmap.h>
10#include <QtCore/qlist.h>
11#include <QtCore/qdatetime.h>
12#include <QtCore/qpoint.h>
13#include <QtCore/qrect.h>
14#include <QtCore/qmetatype.h>
15#include <QtGui/qevent.h>
16
17#ifndef QT_NO_GESTURES
18
19// ### move to qnamespace.h
20QT_DECL_METATYPE_EXTERN_TAGGED(Qt::GestureState, Qt__GestureState, Q_WIDGETS_EXPORT)
21// ### move to qnamespace.h
22QT_DECL_METATYPE_EXTERN_TAGGED(Qt::GestureType, Qt__GestureType, Q_WIDGETS_EXPORT)
23
24QT_BEGIN_NAMESPACE
25
26
27class QGesturePrivate;
28class Q_WIDGETS_EXPORT QGesture : public QObject
29{
30 Q_OBJECT
31 Q_DECLARE_PRIVATE(QGesture)
32
33 Q_PROPERTY(Qt::GestureState state READ state)
34 Q_PROPERTY(Qt::GestureType gestureType READ gestureType)
35 Q_PROPERTY(QGesture::GestureCancelPolicy gestureCancelPolicy READ gestureCancelPolicy
36 WRITE setGestureCancelPolicy)
37 Q_PROPERTY(QPointF hotSpot READ hotSpot WRITE setHotSpot RESET unsetHotSpot)
38 Q_PROPERTY(bool hasHotSpot READ hasHotSpot)
39
40public:
41 explicit QGesture(QObject *parent = nullptr);
42 ~QGesture();
43
44 Qt::GestureType gestureType() const;
45
46 Qt::GestureState state() const;
47
48 QPointF hotSpot() const;
49 void setHotSpot(const QPointF &value);
50 bool hasHotSpot() const;
51 void unsetHotSpot();
52
53 enum GestureCancelPolicy {
54 CancelNone = 0,
55 CancelAllInContext
56 };
57
58 void setGestureCancelPolicy(GestureCancelPolicy policy);
59 GestureCancelPolicy gestureCancelPolicy() const;
60
61protected:
62 QGesture(QGesturePrivate &dd, QObject *parent);
63
64private:
65 friend class QGestureEvent;
66 friend class QGestureRecognizer;
67 friend class QGestureManager;
68 friend class QGraphicsScenePrivate;
69};
70
71class QPanGesturePrivate;
72class Q_WIDGETS_EXPORT QPanGesture : public QGesture
73{
74 Q_OBJECT
75 Q_DECLARE_PRIVATE(QPanGesture)
76
77 Q_PROPERTY(QPointF lastOffset READ lastOffset WRITE setLastOffset)
78 Q_PROPERTY(QPointF offset READ offset WRITE setOffset)
79 Q_PROPERTY(QPointF delta READ delta STORED false)
80 Q_PROPERTY(qreal acceleration READ acceleration WRITE setAcceleration)
81 Q_PRIVATE_PROPERTY(QPanGesture::d_func(), qreal horizontalVelocity READ horizontalVelocity WRITE setHorizontalVelocity)
82 Q_PRIVATE_PROPERTY(QPanGesture::d_func(), qreal verticalVelocity READ verticalVelocity WRITE setVerticalVelocity)
83
84public:
85 explicit QPanGesture(QObject *parent = nullptr);
86 ~QPanGesture();
87
88 QPointF lastOffset() const;
89 QPointF offset() const;
90 QPointF delta() const;
91 qreal acceleration() const;
92
93 void setLastOffset(const QPointF &value);
94 void setOffset(const QPointF &value);
95 void setAcceleration(qreal value);
96
97 friend class QPanGestureRecognizer;
98 friend class QWinNativePanGestureRecognizer;
99};
100
101class QPinchGesturePrivate;
102class Q_WIDGETS_EXPORT QPinchGesture : public QGesture
103{
104 Q_OBJECT
105 Q_DECLARE_PRIVATE(QPinchGesture)
106
107public:
108 enum ChangeFlag {
109 ScaleFactorChanged = 0x1,
110 RotationAngleChanged = 0x2,
111 CenterPointChanged = 0x4
112 };
113 Q_ENUM(ChangeFlag)
114 Q_DECLARE_FLAGS(ChangeFlags, ChangeFlag)
115 Q_FLAG(ChangeFlags)
116
117 Q_PROPERTY(ChangeFlags totalChangeFlags READ totalChangeFlags WRITE setTotalChangeFlags)
118 Q_PROPERTY(ChangeFlags changeFlags READ changeFlags WRITE setChangeFlags)
119
120 Q_PROPERTY(qreal totalScaleFactor READ totalScaleFactor WRITE setTotalScaleFactor)
121 Q_PROPERTY(qreal lastScaleFactor READ lastScaleFactor WRITE setLastScaleFactor)
122 Q_PROPERTY(qreal scaleFactor READ scaleFactor WRITE setScaleFactor)
123
124 Q_PROPERTY(qreal totalRotationAngle READ totalRotationAngle WRITE setTotalRotationAngle)
125 Q_PROPERTY(qreal lastRotationAngle READ lastRotationAngle WRITE setLastRotationAngle)
126 Q_PROPERTY(qreal rotationAngle READ rotationAngle WRITE setRotationAngle)
127
128 Q_PROPERTY(QPointF startCenterPoint READ startCenterPoint WRITE setStartCenterPoint)
129 Q_PROPERTY(QPointF lastCenterPoint READ lastCenterPoint WRITE setLastCenterPoint)
130 Q_PROPERTY(QPointF centerPoint READ centerPoint WRITE setCenterPoint)
131
132public:
133 explicit QPinchGesture(QObject *parent = nullptr);
134 ~QPinchGesture();
135
136 ChangeFlags totalChangeFlags() const;
137 void setTotalChangeFlags(ChangeFlags value);
138
139 ChangeFlags changeFlags() const;
140 void setChangeFlags(ChangeFlags value);
141
142 QPointF startCenterPoint() const;
143 QPointF lastCenterPoint() const;
144 QPointF centerPoint() const;
145 void setStartCenterPoint(const QPointF &value);
146 void setLastCenterPoint(const QPointF &value);
147 void setCenterPoint(const QPointF &value);
148
149 qreal totalScaleFactor() const;
150 qreal lastScaleFactor() const;
151 qreal scaleFactor() const;
152 void setTotalScaleFactor(qreal value);
153 void setLastScaleFactor(qreal value);
154 void setScaleFactor(qreal value);
155
156 qreal totalRotationAngle() const;
157 qreal lastRotationAngle() const;
158 qreal rotationAngle() const;
159 void setTotalRotationAngle(qreal value);
160 void setLastRotationAngle(qreal value);
161 void setRotationAngle(qreal value);
162
163 friend class QPinchGestureRecognizer;
164};
165
166Q_DECLARE_OPERATORS_FOR_FLAGS(QPinchGesture::ChangeFlags)
167
168QT_END_NAMESPACE
169
170QT_DECL_METATYPE_EXTERN_TAGGED(QPinchGesture::ChangeFlags,
171 QPinchGesture__ChangeFlags, Q_WIDGETS_EXPORT)
172
173QT_BEGIN_NAMESPACE
174
175class QSwipeGesturePrivate;
176class Q_WIDGETS_EXPORT QSwipeGesture : public QGesture
177{
178 Q_OBJECT
179 Q_DECLARE_PRIVATE(QSwipeGesture)
180
181 Q_PROPERTY(SwipeDirection horizontalDirection READ horizontalDirection STORED false)
182 Q_PROPERTY(SwipeDirection verticalDirection READ verticalDirection STORED false)
183 Q_PROPERTY(qreal swipeAngle READ swipeAngle WRITE setSwipeAngle)
184 Q_PRIVATE_PROPERTY(QSwipeGesture::d_func(), qreal velocity READ velocity WRITE setVelocity)
185
186public:
187 enum SwipeDirection { NoDirection, Left, Right, Up, Down };
188 Q_ENUM(SwipeDirection)
189
190 explicit QSwipeGesture(QObject *parent = nullptr);
191 ~QSwipeGesture();
192
193 SwipeDirection horizontalDirection() const;
194 SwipeDirection verticalDirection() const;
195
196 qreal swipeAngle() const;
197 void setSwipeAngle(qreal value);
198
199 friend class QSwipeGestureRecognizer;
200};
201
202class QTapGesturePrivate;
203class Q_WIDGETS_EXPORT QTapGesture : public QGesture
204{
205 Q_OBJECT
206 Q_DECLARE_PRIVATE(QTapGesture)
207
208 Q_PROPERTY(QPointF position READ position WRITE setPosition)
209
210public:
211 explicit QTapGesture(QObject *parent = nullptr);
212 ~QTapGesture();
213
214 QPointF position() const;
215 void setPosition(const QPointF &pos);
216
217 friend class QTapGestureRecognizer;
218};
219
220class QTapAndHoldGesturePrivate;
221class Q_WIDGETS_EXPORT QTapAndHoldGesture : public QGesture
222{
223 Q_OBJECT
224 Q_DECLARE_PRIVATE(QTapAndHoldGesture)
225
226 Q_PROPERTY(QPointF position READ position WRITE setPosition)
227
228public:
229 explicit QTapAndHoldGesture(QObject *parent = nullptr);
230 ~QTapAndHoldGesture();
231
232 QPointF position() const;
233 void setPosition(const QPointF &pos);
234
235 static void setTimeout(int msecs);
236 static int timeout();
237
238 friend class QTapAndHoldGestureRecognizer;
239};
240
241class QGesture;
242class QGestureEventPrivate;
243class Q_WIDGETS_EXPORT QGestureEvent : public QEvent
244{
245public:
246 explicit QGestureEvent(const QList<QGesture *> &gestures);
247 ~QGestureEvent();
248
249 QList<QGesture *> gestures() const;
250 QGesture *gesture(Qt::GestureType type) const;
251
252 QList<QGesture *> activeGestures() const;
253 QList<QGesture *> canceledGestures() const;
254
255 using QEvent::setAccepted;
256 using QEvent::isAccepted;
257 using QEvent::accept;
258 using QEvent::ignore;
259
260 void setAccepted(QGesture *, bool);
261 void accept(QGesture *);
262 void ignore(QGesture *);
263 bool isAccepted(QGesture *) const;
264
265 void setAccepted(Qt::GestureType, bool);
266 void accept(Qt::GestureType);
267 void ignore(Qt::GestureType);
268 bool isAccepted(Qt::GestureType) const;
269
270 void setWidget(QWidget *widget);
271 QWidget *widget() const;
272
273#if QT_CONFIG(graphicsview)
274 QPointF mapToGraphicsScene(const QPointF &gesturePoint) const;
275#endif
276
277private:
278 QList<QGesture *> m_gestures;
279 QWidget *m_widget;
280 QMap<Qt::GestureType, bool> m_accepted;
281 QMap<Qt::GestureType, QWidget *> m_targetWidgets;
282
283 friend class QApplication;
284 friend class QGestureManager;
285};
286
287# ifndef QT_NO_DEBUG_STREAM
288Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QGesture *);
289Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QGestureEvent *);
290# endif
291
292QT_END_NAMESPACE
293
294QT_DECL_METATYPE_EXTERN_TAGGED(QGesture::GestureCancelPolicy,
295 QGesture__GestureCancelPolicy, Q_WIDGETS_EXPORT)
296
297#endif // QT_NO_GESTURES
298
299#endif // QGESTURE_H
300

source code of qtbase/src/widgets/kernel/qgesture.h