summaryrefslogtreecommitdiffstats
path: root/src/datavisualization
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-09-18 12:34:04 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-09-18 12:43:18 +0300
commita34fa48f1d9a82e5a3172417ee53bf0e0c4261b3 (patch)
tree71af5b649f16f98eeddfde993a2e96d25b574d2f /src/datavisualization
parent03b9a7b753a255231bedad6a4ad8adcdd09ed842 (diff)
Implemented tap-and-hold for touch input handler
+ added touch selection support for surface Task-number: QTRD-2304 Task-number: QTRD-2308 Change-Id: I34808e2101e90e97b921e919acad92da964cbade Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization')
-rw-r--r--src/datavisualization/input/input.pri3
-rw-r--r--src/datavisualization/input/q3dinputhandler.cpp1
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler.cpp58
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler.h4
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler_p.h47
5 files changed, 108 insertions, 5 deletions
diff --git a/src/datavisualization/input/input.pri b/src/datavisualization/input/input.pri
index b308a7e0..5a4c4a76 100644
--- a/src/datavisualization/input/input.pri
+++ b/src/datavisualization/input/input.pri
@@ -3,7 +3,8 @@ HEADERS += \
$$PWD/q3dinputhandler.h \
$$PWD/qtouch3dinputhandler.h \
$$PWD/qabstract3dinputhandler_p.h \
- $$PWD/q3dinputhandler_p.h
+ $$PWD/q3dinputhandler_p.h \
+ $$PWD/qtouch3dinputhandler_p.h
SOURCES += \
$$PWD/qabstract3dinputhandler.cpp \
diff --git a/src/datavisualization/input/q3dinputhandler.cpp b/src/datavisualization/input/q3dinputhandler.cpp
index 2b16c942..8c7d83d0 100644
--- a/src/datavisualization/input/q3dinputhandler.cpp
+++ b/src/datavisualization/input/q3dinputhandler.cpp
@@ -61,6 +61,7 @@ void Q3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mousePos
setInputState(QDataVis::InputOnScene);
// update mouse positions to prevent jumping when releasing or repressing a button
setInputPosition(mousePos);
+ // TODO: Get rid of these (QTRD-2307)
emit selectionAtPoint(mousePos);
//qDebug() << "Mouse pressed on scene";
diff --git a/src/datavisualization/input/qtouch3dinputhandler.cpp b/src/datavisualization/input/qtouch3dinputhandler.cpp
index 75ef0d0c..f77ac9c0 100644
--- a/src/datavisualization/input/qtouch3dinputhandler.cpp
+++ b/src/datavisualization/input/qtouch3dinputhandler.cpp
@@ -15,13 +15,19 @@
** contact form at http://qt.digia.com
**
****************************************************************************/
-#include "qtouch3dinputhandler.h"
+
+#include "qtouch3dinputhandler_p.h"
#include "q3dcamera.h"
+#include <QTimer>
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-QTouch3DInputHandler::QTouch3DInputHandler(QObject *parent) :
- Q3DInputHandler(parent)
+const qreal maxTapAndHoldJitter = 10;
+const int tapAndHoldTime = 250;
+
+QTouch3DInputHandler::QTouch3DInputHandler(QObject *parent)
+ : Q3DInputHandler(parent),
+ d_ptr(new QTouch3DInputHandlerPrivate(this))
{
}
@@ -35,7 +41,9 @@ void QTouch3DInputHandler::mouseDoubleClickEvent(QMouseEvent *event)
if (!scene()->isSlicingActivated()) {
setInputState(QDataVis::InputOnScene);
// update mouse positions to prevent jumping when releasing or repressing a button
- setInputPosition( event->pos() );
+ setInputPosition(event->pos());
+ // TODO: Get rid of these (QTRD-2307)
+ emit selectionAtPoint(inputPosition());
}
}
@@ -45,6 +53,8 @@ void QTouch3DInputHandler::touchEvent(QTouchEvent *event)
points = event->touchPoints();
if (!scene()->isSlicingActivated() && points.count() == 2) {
+ d_ptr->m_holdTimer->stop();
+
setInputState(QDataVis::InputOnPinch);
QPointF distance = points.at(0).pos() - points.at(1).pos();
@@ -63,6 +73,19 @@ void QTouch3DInputHandler::touchEvent(QTouchEvent *event)
zoomLevel = 10;
scene()->camera()->setZoomLevel(zoomLevel);
setPrevDistance(newDistance);
+ } else if (!scene()->isSlicingActivated() && points.count() == 1) {
+ if (event->type() == QEvent::TouchBegin) {
+ // Tap-and-hold selection start
+ d_ptr->m_startHoldPos = points.at(0).pos();
+ d_ptr->m_touchHoldPos = d_ptr->m_startHoldPos;
+ d_ptr->m_holdTimer->start();
+ } else if (event->type() == QEvent::TouchEnd) {
+ d_ptr->m_holdTimer->stop();
+ } else if (event->type() == QEvent::TouchUpdate) {
+ d_ptr->m_touchHoldPos = points.at(0).pos();
+ }
+ } else {
+ d_ptr->m_holdTimer->stop();
}
}
@@ -97,4 +120,31 @@ void QTouch3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mou
}
}
+QTouch3DInputHandlerPrivate::QTouch3DInputHandlerPrivate(QTouch3DInputHandler *q)
+ : q_ptr(q),
+ m_holdTimer(0)
+{
+ m_holdTimer = new QTimer();
+ m_holdTimer->setSingleShot(true);
+ m_holdTimer->setInterval(tapAndHoldTime);
+ QObject::connect(m_holdTimer, &QTimer::timeout, this, &QTouch3DInputHandlerPrivate::tapAndHold);
+}
+
+QTouch3DInputHandlerPrivate::~QTouch3DInputHandlerPrivate()
+{
+ m_holdTimer->stop();
+ delete m_holdTimer;
+}
+
+void QTouch3DInputHandlerPrivate::tapAndHold()
+{
+ QPointF distance = m_startHoldPos - m_touchHoldPos;
+ if (distance.manhattanLength() < maxTapAndHoldJitter) {
+ q_ptr->setInputPosition(QPoint(int(m_touchHoldPos.x()), int(m_touchHoldPos.y())));
+ q_ptr->setInputState(QDataVis::InputOnScene);
+ // TODO: Get rid of these (QTRD-2307)
+ emit q_ptr->selectionAtPoint(q_ptr->inputPosition());
+ }
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/input/qtouch3dinputhandler.h b/src/datavisualization/input/qtouch3dinputhandler.h
index 4d5edefc..2c4b67dd 100644
--- a/src/datavisualization/input/qtouch3dinputhandler.h
+++ b/src/datavisualization/input/qtouch3dinputhandler.h
@@ -23,6 +23,8 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+class QTouch3DInputHandlerPrivate;
+
class QT_DATAVISUALIZATION_EXPORT QTouch3DInputHandler : public Q3DInputHandler
{
Q_OBJECT
@@ -38,6 +40,8 @@ public:
private:
Q_DISABLE_COPY(QTouch3DInputHandler)
+
+ QScopedPointer<QTouch3DInputHandlerPrivate> d_ptr;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/input/qtouch3dinputhandler_p.h b/src/datavisualization/input/qtouch3dinputhandler_p.h
new file mode 100644
index 00000000..f6b7f782
--- /dev/null
+++ b/src/datavisualization/input/qtouch3dinputhandler_p.h
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#ifndef QTOUCH3DINPUTHANDLER_P_H
+#define QTOUCH3DINPUTHANDLER_P_H
+
+#include "qtouch3dinputhandler.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QAbstract3DInputHandler;
+
+class QTouch3DInputHandlerPrivate : public QObject
+{
+ Q_OBJECT
+
+public:
+ QTouch3DInputHandlerPrivate(QTouch3DInputHandler *q);
+ ~QTouch3DInputHandlerPrivate();
+
+ void tapAndHold();
+
+public:
+ QTouch3DInputHandler *q_ptr;
+ QTimer *m_holdTimer;
+ QPointF m_startHoldPos;
+ QPointF m_touchHoldPos;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif // QTOUCH3DINPUTHANDLER_H