1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtWidgets module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #ifndef QGESTURE_H 41 #define QGESTURE_H 42 43 #include <QtWidgets/qtwidgetsglobal.h> 44 #include <QtCore/qobject.h> 45 #include <QtCore/qlist.h> 46 #include <QtCore/qdatetime.h> 47 #include <QtCore/qpoint.h> 48 #include <QtCore/qrect.h> 49 #include <QtCore/qmetatype.h> 50 #include <QtGui/qevent.h> 51 52 #ifndef QT_NO_GESTURES 53 54 Q_DECLARE_METATYPE(Qt::GestureState) 55 Q_DECLARE_METATYPE(Qt::GestureType) 56 57 QT_BEGIN_NAMESPACE 58 59 60 class QGesturePrivate; 61 class Q_WIDGETS_EXPORT QGesture : public QObject 62 { 63 Q_OBJECT 64 Q_DECLARE_PRIVATE(QGesture) 65 66 Q_PROPERTY(Qt::GestureState state READ state) 67 Q_PROPERTY(Qt::GestureType gestureType READ gestureType) 68 Q_PROPERTY(QGesture::GestureCancelPolicy gestureCancelPolicy READ gestureCancelPolicy WRITE setGestureCancelPolicy) 69 Q_PROPERTY(QPointF hotSpot READ hotSpot WRITE setHotSpot RESET unsetHotSpot) 70 Q_PROPERTY(bool hasHotSpot READ hasHotSpot) 71 72 public: 73 explicit QGesture(QObject *parent = nullptr); 74 ~QGesture(); 75 76 Qt::GestureType gestureType() const; 77 78 Qt::GestureState state() const; 79 80 QPointF hotSpot() const; 81 void setHotSpot(const QPointF &value); 82 bool hasHotSpot() const; 83 void unsetHotSpot(); 84 85 enum GestureCancelPolicy { 86 CancelNone = 0, 87 CancelAllInContext 88 }; 89 90 void setGestureCancelPolicy(GestureCancelPolicy policy); 91 GestureCancelPolicy gestureCancelPolicy() const; 92 93 protected: 94 QGesture(QGesturePrivate &dd, QObject *parent); 95 96 private: 97 friend class QGestureEvent; 98 friend class QGestureRecognizer; 99 friend class QGestureManager; 100 friend class QGraphicsScenePrivate; 101 }; 102 103 class QPanGesturePrivate; 104 class Q_WIDGETS_EXPORT QPanGesture : public QGesture 105 { 106 Q_OBJECT 107 Q_DECLARE_PRIVATE(QPanGesture) 108 109 Q_PROPERTY(QPointF lastOffset READ lastOffset WRITE setLastOffset) 110 Q_PROPERTY(QPointF offset READ offset WRITE setOffset) 111 Q_PROPERTY(QPointF delta READ delta STORED false) 112 Q_PROPERTY(qreal acceleration READ acceleration WRITE setAcceleration) 113 Q_PRIVATE_PROPERTY(QPanGesture::d_func(), qreal horizontalVelocity READ horizontalVelocity WRITE setHorizontalVelocity) 114 Q_PRIVATE_PROPERTY(QPanGesture::d_func(), qreal verticalVelocity READ verticalVelocity WRITE setVerticalVelocity) 115 116 public: 117 explicit QPanGesture(QObject *parent = nullptr); 118 ~QPanGesture(); 119 120 QPointF lastOffset() const; 121 QPointF offset() const; 122 QPointF delta() const; 123 qreal acceleration() const; 124 125 void setLastOffset(const QPointF &value); 126 void setOffset(const QPointF &value); 127 void setAcceleration(qreal value); 128 129 friend class QPanGestureRecognizer; 130 friend class QWinNativePanGestureRecognizer; 131 }; 132 133 class QPinchGesturePrivate; 134 class Q_WIDGETS_EXPORT QPinchGesture : public QGesture 135 { 136 Q_OBJECT 137 Q_DECLARE_PRIVATE(QPinchGesture) 138 139 public: 140 enum ChangeFlag { 141 ScaleFactorChanged = 0x1, 142 RotationAngleChanged = 0x2, 143 CenterPointChanged = 0x4 144 }; 145 Q_FLAG(ChangeFlag) 146 Q_DECLARE_FLAGS(ChangeFlags, ChangeFlag) 147 Q_FLAG(ChangeFlags) 148 149 Q_PROPERTY(ChangeFlags totalChangeFlags READ totalChangeFlags WRITE setTotalChangeFlags) 150 Q_PROPERTY(ChangeFlags changeFlags READ changeFlags WRITE setChangeFlags) 151 152 Q_PROPERTY(qreal totalScaleFactor READ totalScaleFactor WRITE setTotalScaleFactor) 153 Q_PROPERTY(qreal lastScaleFactor READ lastScaleFactor WRITE setLastScaleFactor) 154 Q_PROPERTY(qreal scaleFactor READ scaleFactor WRITE setScaleFactor) 155 156 Q_PROPERTY(qreal totalRotationAngle READ totalRotationAngle WRITE setTotalRotationAngle) 157 Q_PROPERTY(qreal lastRotationAngle READ lastRotationAngle WRITE setLastRotationAngle) 158 Q_PROPERTY(qreal rotationAngle READ rotationAngle WRITE setRotationAngle) 159 160 Q_PROPERTY(QPointF startCenterPoint READ startCenterPoint WRITE setStartCenterPoint) 161 Q_PROPERTY(QPointF lastCenterPoint READ lastCenterPoint WRITE setLastCenterPoint) 162 Q_PROPERTY(QPointF centerPoint READ centerPoint WRITE setCenterPoint) 163 164 public: 165 explicit QPinchGesture(QObject *parent = nullptr); 166 ~QPinchGesture(); 167 168 ChangeFlags totalChangeFlags() const; 169 void setTotalChangeFlags(ChangeFlags value); 170 171 ChangeFlags changeFlags() const; 172 void setChangeFlags(ChangeFlags value); 173 174 QPointF startCenterPoint() const; 175 QPointF lastCenterPoint() const; 176 QPointF centerPoint() const; 177 void setStartCenterPoint(const QPointF &value); 178 void setLastCenterPoint(const QPointF &value); 179 void setCenterPoint(const QPointF &value); 180 181 qreal totalScaleFactor() const; 182 qreal lastScaleFactor() const; 183 qreal scaleFactor() const; 184 void setTotalScaleFactor(qreal value); 185 void setLastScaleFactor(qreal value); 186 void setScaleFactor(qreal value); 187 188 qreal totalRotationAngle() const; 189 qreal lastRotationAngle() const; 190 qreal rotationAngle() const; 191 void setTotalRotationAngle(qreal value); 192 void setLastRotationAngle(qreal value); 193 void setRotationAngle(qreal value); 194 195 friend class QPinchGestureRecognizer; 196 }; 197 198 Q_DECLARE_OPERATORS_FOR_FLAGS(QPinchGesture::ChangeFlags) 199 200 QT_END_NAMESPACE 201 202 Q_DECLARE_METATYPE(QPinchGesture::ChangeFlags) 203 204 QT_BEGIN_NAMESPACE 205 206 class QSwipeGesturePrivate; 207 class Q_WIDGETS_EXPORT QSwipeGesture : public QGesture 208 { 209 Q_OBJECT 210 Q_DECLARE_PRIVATE(QSwipeGesture) 211 212 Q_PROPERTY(SwipeDirection horizontalDirection READ horizontalDirection STORED false) 213 Q_PROPERTY(SwipeDirection verticalDirection READ verticalDirection STORED false) 214 Q_PROPERTY(qreal swipeAngle READ swipeAngle WRITE setSwipeAngle) 215 Q_PRIVATE_PROPERTY(QSwipeGesture::d_func(), qreal velocity READ velocity WRITE setVelocity) 216 217 public: 218 enum SwipeDirection { NoDirection, Left, Right, Up, Down }; 219 Q_ENUM(SwipeDirection) 220 221 explicit QSwipeGesture(QObject *parent = nullptr); 222 ~QSwipeGesture(); 223 224 SwipeDirection horizontalDirection() const; 225 SwipeDirection verticalDirection() const; 226 227 qreal swipeAngle() const; 228 void setSwipeAngle(qreal value); 229 230 friend class QSwipeGestureRecognizer; 231 }; 232 233 class QTapGesturePrivate; 234 class Q_WIDGETS_EXPORT QTapGesture : public QGesture 235 { 236 Q_OBJECT 237 Q_DECLARE_PRIVATE(QTapGesture) 238 239 Q_PROPERTY(QPointF position READ position WRITE setPosition) 240 241 public: 242 explicit QTapGesture(QObject *parent = nullptr); 243 ~QTapGesture(); 244 245 QPointF position() const; 246 void setPosition(const QPointF &pos); 247 248 friend class QTapGestureRecognizer; 249 }; 250 251 class QTapAndHoldGesturePrivate; 252 class Q_WIDGETS_EXPORT QTapAndHoldGesture : public QGesture 253 { 254 Q_OBJECT 255 Q_DECLARE_PRIVATE(QTapAndHoldGesture) 256 257 Q_PROPERTY(QPointF position READ position WRITE setPosition) 258 259 public: 260 explicit QTapAndHoldGesture(QObject *parent = nullptr); 261 ~QTapAndHoldGesture(); 262 263 QPointF position() const; 264 void setPosition(const QPointF &pos); 265 266 static void setTimeout(int msecs); 267 static int timeout(); 268 269 friend class QTapAndHoldGestureRecognizer; 270 }; 271 272 class QGesture; 273 class QGestureEventPrivate; 274 class Q_WIDGETS_EXPORT QGestureEvent : public QEvent 275 { 276 public: 277 explicit QGestureEvent(const QList<QGesture *> &gestures); 278 ~QGestureEvent(); 279 280 QList<QGesture *> gestures() const; 281 QGesture *gesture(Qt::GestureType type) const; 282 283 QList<QGesture *> activeGestures() const; 284 QList<QGesture *> canceledGestures() const; 285 286 using QEvent::setAccepted; 287 using QEvent::isAccepted; 288 using QEvent::accept; 289 using QEvent::ignore; 290 291 void setAccepted(QGesture *, bool); 292 void accept(QGesture *); 293 void ignore(QGesture *); 294 bool isAccepted(QGesture *) const; 295 296 void setAccepted(Qt::GestureType, bool); 297 void accept(Qt::GestureType); 298 void ignore(Qt::GestureType); 299 bool isAccepted(Qt::GestureType) const; 300 301 void setWidget(QWidget *widget); 302 QWidget *widget() const; 303 304 #if QT_CONFIG(graphicsview) 305 QPointF mapToGraphicsScene(const QPointF &gesturePoint) const; 306 #endif 307 308 private: 309 QList<QGesture *> m_gestures; 310 QWidget *m_widget; 311 QMap<Qt::GestureType, bool> m_accepted; 312 QMap<Qt::GestureType, QWidget *> m_targetWidgets; 313 314 friend class QApplication; 315 friend class QGestureManager; 316 }; 317 318 # ifndef QT_NO_DEBUG_STREAM 319 Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QGesture *); 320 Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QGestureEvent *); 321 # endif 322 323 QT_END_NAMESPACE 324 325 Q_DECLARE_METATYPE(QGesture::GestureCancelPolicy) 326 #endif // QT_NO_GESTURES 327 328 #endif // QGESTURE_H 329