aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickmultipointtoucharea_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/qquickmultipointtoucharea_p.h')
-rw-r--r--src/quick/items/qquickmultipointtoucharea_p.h265
1 files changed, 265 insertions, 0 deletions
diff --git a/src/quick/items/qquickmultipointtoucharea_p.h b/src/quick/items/qquickmultipointtoucharea_p.h
new file mode 100644
index 0000000000..aee18a376b
--- /dev/null
+++ b/src/quick/items/qquickmultipointtoucharea_p.h
@@ -0,0 +1,265 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQUICKMULTIPOINTTOUCHAREA_H
+#define QQUICKMULTIPOINTTOUCHAREA_H
+
+#include "qquickitem.h"
+#include "qevent.h"
+
+#include <QMap>
+#include <QList>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qstylehints.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QQuickMultiPointTouchArea;
+class Q_AUTOTEST_EXPORT QQuickTouchPoint : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool valid READ isValid NOTIFY validityChanged)
+ Q_PROPERTY(int pointId READ pointId NOTIFY pointIdChanged)
+ Q_PROPERTY(qreal x READ x NOTIFY xChanged)
+ Q_PROPERTY(qreal y READ y NOTIFY yChanged)
+ Q_PROPERTY(qreal pressure READ pressure NOTIFY pressureChanged)
+ Q_PROPERTY(QRectF area READ area NOTIFY areaChanged)
+
+ Q_PROPERTY(qreal startX READ startX NOTIFY startXChanged)
+ Q_PROPERTY(qreal startY READ startY NOTIFY startYChanged)
+ Q_PROPERTY(qreal previousX READ previousX NOTIFY previousXChanged)
+ Q_PROPERTY(qreal previousY READ previousY NOTIFY previousYChanged)
+ Q_PROPERTY(qreal sceneX READ sceneX NOTIFY sceneXChanged)
+ Q_PROPERTY(qreal sceneY READ sceneY NOTIFY sceneYChanged)
+
+public:
+ QQuickTouchPoint(bool qmlDefined = true)
+ : _id(0),
+ _x(0.0), _y(0.0),
+ _pressure(0.0),
+ _qmlDefined(qmlDefined),
+ _valid(!qmlDefined),
+ _previousX(0.0), _previousY(0.0),
+ _sceneX(0.0), _sceneY(0.0)
+ {}
+
+ int pointId() const { return _id; }
+ void setPointId(int id);
+
+ qreal x() const { return _x; }
+ void setX(qreal x);
+
+ qreal y() const { return _y; }
+ void setY(qreal y);
+
+ qreal pressure() const { return _pressure; }
+ void setPressure(qreal pressure);
+
+ QRectF area() const { return _area; }
+ void setArea(const QRectF &area);
+
+ bool isQmlDefined() { return _qmlDefined; }
+
+ bool isValid() { return _valid; }
+ void setValid(bool valid);
+
+ qreal startX() const { return _startX; }
+ void setStartX(qreal startX);
+
+ qreal startY() const { return _startY; }
+ void setStartY(qreal startY);
+
+ qreal previousX() const { return _previousX; }
+ void setPreviousX(qreal previousX);
+
+ qreal previousY() const { return _previousY; }
+ void setPreviousY(qreal previousY);
+
+ qreal sceneX() const { return _sceneX; }
+ void setSceneX(qreal sceneX);
+
+ qreal sceneY() const { return _sceneY; }
+ void setSceneY(qreal sceneY);
+
+
+Q_SIGNALS:
+ void pointIdChanged();
+ void xChanged();
+ void yChanged();
+ void pressureChanged();
+ void areaChanged();
+ void validityChanged();
+ void startXChanged();
+ void startYChanged();
+ void previousXChanged();
+ void previousYChanged();
+ void sceneXChanged();
+ void sceneYChanged();
+
+private:
+ friend class QQuickMultiPointTouchArea;
+ int _id;
+ qreal _x;
+ qreal _y;
+ qreal _pressure;
+ QRectF _area;
+ bool _qmlDefined;
+ bool _valid;
+ qreal _startX;
+ qreal _startY;
+ qreal _previousX;
+ qreal _previousY;
+ qreal _sceneX;
+ qreal _sceneY;
+};
+
+class QQuickGrabGestureEvent : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QDeclarativeListProperty<QObject> touchPoints READ touchPoints)
+ Q_PROPERTY(qreal dragThreshold READ dragThreshold)
+public:
+ QQuickGrabGestureEvent() : _grab(false), _dragThreshold(qApp->styleHints()->startDragDistance()) {}
+
+ Q_INVOKABLE void grab() { _grab = true; }
+ bool wantsGrab() const { return _grab; }
+
+ QDeclarativeListProperty<QObject> touchPoints() {
+ return QDeclarativeListProperty<QObject>(this, _touchPoints);
+ }
+ qreal dragThreshold() const { return _dragThreshold; }
+
+private:
+ friend class QQuickMultiPointTouchArea;
+ bool _grab;
+ qreal _dragThreshold;
+ QList<QObject*> _touchPoints;
+};
+
+class Q_AUTOTEST_EXPORT QQuickMultiPointTouchArea : public QQuickItem
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QDeclarativeListProperty<QQuickTouchPoint> touchPoints READ touchPoints)
+ Q_PROPERTY(int minimumTouchPoints READ minimumTouchPoints WRITE setMinimumTouchPoints NOTIFY minimumTouchPointsChanged)
+ Q_PROPERTY(int maximumTouchPoints READ maximumTouchPoints WRITE setMaximumTouchPoints NOTIFY maximumTouchPointsChanged)
+
+public:
+ QQuickMultiPointTouchArea(QQuickItem *parent=0);
+ ~QQuickMultiPointTouchArea();
+
+ int minimumTouchPoints() const;
+ void setMinimumTouchPoints(int num);
+ int maximumTouchPoints() const;
+ void setMaximumTouchPoints(int num);
+
+ QDeclarativeListProperty<QQuickTouchPoint> touchPoints() {
+ return QDeclarativeListProperty<QQuickTouchPoint>(this, 0, QQuickMultiPointTouchArea::touchPoint_append, QQuickMultiPointTouchArea::touchPoint_count, QQuickMultiPointTouchArea::touchPoint_at, 0);
+ }
+
+ static void touchPoint_append(QDeclarativeListProperty<QQuickTouchPoint> *list, QQuickTouchPoint* touch) {
+ QQuickMultiPointTouchArea *q = static_cast<QQuickMultiPointTouchArea*>(list->object);
+ q->addTouchPrototype(touch);
+ }
+
+ static int touchPoint_count(QDeclarativeListProperty<QQuickTouchPoint> *list) {
+ QQuickMultiPointTouchArea *q = static_cast<QQuickMultiPointTouchArea*>(list->object);
+ return q->_touchPrototypes.count();
+ }
+
+ static QQuickTouchPoint* touchPoint_at(QDeclarativeListProperty<QQuickTouchPoint> *list, int index) {
+ QQuickMultiPointTouchArea *q = static_cast<QQuickMultiPointTouchArea*>(list->object);
+ return q->_touchPrototypes[index];
+ }
+
+Q_SIGNALS:
+ void touchPointsPressed(const QList<QObject*> &touchPoints);
+ void touchPointsUpdated(const QList<QObject*> &touchPoints);
+ void touchPointsReleased(const QList<QObject*> &touchPoints);
+ void touchPointsCanceled(const QList<QObject*> &touchPoints);
+ void gestureStarted(QQuickGrabGestureEvent *gesture);
+ void touchUpdated(const QList<QObject*> &touchPoints);
+ void minimumTouchPointsChanged();
+ void maximumTouchPointsChanged();
+
+protected:
+ void touchEvent(QTouchEvent *);
+ bool childMouseEventFilter(QQuickItem *i, QEvent *event);
+ void mousePressEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
+ void mouseMoveEvent(QMouseEvent *event);
+ void mouseUngrabEvent();
+ void touchUngrabEvent();
+
+ void addTouchPrototype(QQuickTouchPoint* prototype);
+ void addTouchPoint(const QTouchEvent::TouchPoint *p);
+ void clearTouchLists();
+
+ void updateTouchPoint(QQuickTouchPoint*, const QTouchEvent::TouchPoint*);
+ void updateTouchData(QEvent*);
+
+ bool sendMouseEvent(QMouseEvent *event);
+ bool shouldFilter(QEvent *event);
+ void grabGesture();
+
+private:
+ void ungrab();
+ QMap<int,QQuickTouchPoint*> _touchPrototypes; //TouchPoints defined in QML
+ QMap<int,QObject*> _touchPoints; //All current touch points
+ QList<QObject*> _releasedTouchPoints;
+ QList<QObject*> _pressedTouchPoints;
+ QList<QObject*> _movedTouchPoints;
+ int _minimumTouchPoints;
+ int _maximumTouchPoints;
+ bool _stealMouse;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickTouchPoint)
+QML_DECLARE_TYPE(QQuickGrabGestureEvent)
+QML_DECLARE_TYPE(QQuickMultiPointTouchArea)
+
+QT_END_HEADER
+
+#endif // QQUICKMULTIPOINTTOUCHAREA_H