summaryrefslogtreecommitdiffstats
path: root/examples/gestures/collidingmice/gesturerecognizerlinjazax.h
diff options
context:
space:
mode:
Diffstat (limited to 'examples/gestures/collidingmice/gesturerecognizerlinjazax.h')
-rw-r--r--examples/gestures/collidingmice/gesturerecognizerlinjazax.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/examples/gestures/collidingmice/gesturerecognizerlinjazax.h b/examples/gestures/collidingmice/gesturerecognizerlinjazax.h
new file mode 100644
index 0000000..07172f1
--- /dev/null
+++ b/examples/gestures/collidingmice/gesturerecognizerlinjazax.h
@@ -0,0 +1,65 @@
+#ifndef GESTURERECOGNIZERLINJAZAX_H
+#define GESTURERECOGNIZERLINJAZAX_H
+
+#include <QList>
+#include <QPoint>
+#include <QString>
+#include <QGesture>
+#include <QGestureRecognizer>
+
+#include "linjazaxgesture.h"
+
+struct Direction
+{
+ QString direction;
+ QPoint point;
+
+ Direction(QString dir, const QPoint &pt)
+ : direction(dir), point(pt) { }
+ Direction()
+ : direction() { }
+
+ inline bool isEmpty() const { return direction.isEmpty(); }
+ inline bool isNull() const { return direction.isEmpty(); }
+};
+typedef QList<Direction> DirectionList;
+
+class DirectionSimpleRecognizer
+{
+public:
+ DirectionSimpleRecognizer();
+ Direction addPosition(const QPoint &pos);
+ DirectionList getDirections() const;
+ void reset();
+
+private:
+ QPoint lastPoint;
+ DirectionList directions;
+};
+
+class GestureRecognizerLinjaZax : public QGestureRecognizer
+{
+ Q_OBJECT
+public:
+ GestureRecognizerLinjaZax();
+
+ QGestureRecognizer::Result filterEvent(const QEvent *event);
+ QGesture* getGesture();
+
+ void reset();
+
+private:
+ void internalReset();
+
+ QPoint pressedPos;
+ QPoint lastPos;
+ QPoint currentPos;
+ bool mousePressed;
+ bool gestureFinished;
+ QString lastDirections;
+ QString currentDirection;
+ DirectionSimpleRecognizer simpleRecognizer;
+ LinjaZaxGesture::ZoomState zoomState;
+};
+
+#endif