diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-27 13:10:44 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-27 13:13:58 +0200 |
commit | b368e57e59351736f9ad06834a743a7c1b49d368 (patch) | |
tree | 3b7d42569905d8cde0ca7571cd664428354a50dd /src/datavisualization/input/qtouch3dinputhandler.cpp | |
parent | eb3d0514ca886db33776522ea00f27b69bc86ad1 (diff) | |
parent | 05d06fbc61f07e400b519a9b020c2473398627c1 (diff) |
Merge branch 'develop'v1.0.0-beta1
Change-Id: I1c9a255eb8f30a24b665856d3711f0abe77c6ef4
Diffstat (limited to 'src/datavisualization/input/qtouch3dinputhandler.cpp')
-rw-r--r-- | src/datavisualization/input/qtouch3dinputhandler.cpp | 78 |
1 files changed, 45 insertions, 33 deletions
diff --git a/src/datavisualization/input/qtouch3dinputhandler.cpp b/src/datavisualization/input/qtouch3dinputhandler.cpp index 42769562..76b5721b 100644 --- a/src/datavisualization/input/qtouch3dinputhandler.cpp +++ b/src/datavisualization/input/qtouch3dinputhandler.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -21,7 +21,7 @@ #include <QTimer> #include <qmath.h> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION const float maxTapAndHoldJitter = 20.0f; const int maxPinchJitter = 10; @@ -45,22 +45,27 @@ const int maxZoomLevel = 500; * * Default touch input handler has the following functionalty: * \table - * \header - * \li Gesture \li Action - * \row - * \li Touch-And-Move \li Rotate graph within limits set for Q3DCamera - * \row - * \li Tap \li Select the item tapped or remove selection if none. - * May open the secondary view depending on the - * selection mode. - * \row - * \li Tap-And-Hold \li Same as tap. - * \row - * \li Pinch \li Zoom in/out within default range (10...500%). - * \row - * \li Tap on the primary view when the secondary view is visible - * \li Closes the secondary view. - * \note Secondary view is available only for Q3DBars and Q3DSurface graphs. + * \header + * \li Gesture + * \li Action + * \row + * \li Touch-And-Move + * \li Rotate graph within limits set for Q3DCamera + * \row + * \li Tap + * \li Select the item tapped or remove selection if none. + * May open the secondary view depending on the + * \l {QAbstract3DGraph::selectionMode}{selection mode}. + * \row + * \li Tap-And-Hold + * \li Same as tap. + * \row + * \li Pinch + * \li Zoom in/out within default range (10...500%). + * \row + * \li Tap on the primary view when the secondary view is visible + * \li Closes the secondary view. + * \note Secondary view is available only for Q3DBars and Q3DSurface graphs. * \endtable */ @@ -99,24 +104,27 @@ void QTouch3DInputHandler::touchEvent(QTouchEvent *event) if (event->type() == QEvent::TouchBegin) { if (scene()->isSlicingActive()) { if (scene()->isPointInPrimarySubView(pointerPos.toPoint())) - setInputState(InputStateOnPrimaryView); + setInputView(InputViewOnPrimary); else if (scene()->isPointInSecondarySubView(pointerPos.toPoint())) - setInputState(InputStateOnSecondaryView); + setInputView(InputViewOnSecondary); else - setInputState(InputStateNone); + setInputView(InputViewNone); } else { // Handle possible tap-and-hold selection d_ptr->m_startHoldPos = pointerPos; d_ptr->m_touchHoldPos = d_ptr->m_startHoldPos; d_ptr->m_holdTimer->start(); + setInputView(InputViewOnPrimary); // Start rotating - setInputState(InputStateRotating); + d_ptr->m_inputState = QAbstract3DInputHandlerPrivate::InputStateRotating; setInputPosition(pointerPos.toPoint()); } } else if (event->type() == QEvent::TouchEnd) { + setInputView(InputViewNone); d_ptr->m_holdTimer->stop(); // Handle possible selection - d_ptr->handleSelection(pointerPos); + if (QAbstract3DInputHandlerPrivate::InputStatePinching != d_ptr->m_inputState) + d_ptr->handleSelection(pointerPos); } else if (event->type() == QEvent::TouchUpdate) { if (!scene()->isSlicingActive()) { d_ptr->m_touchHoldPos = pointerPos; @@ -131,7 +139,8 @@ void QTouch3DInputHandler::touchEvent(QTouchEvent *event) QTouch3DInputHandlerPrivate::QTouch3DInputHandlerPrivate(QTouch3DInputHandler *q) : q_ptr(q), - m_holdTimer(0) + m_holdTimer(0), + m_inputState(QAbstract3DInputHandlerPrivate::InputStateNone) { m_holdTimer = new QTimer(); m_holdTimer->setSingleShot(true); @@ -151,7 +160,7 @@ void QTouch3DInputHandlerPrivate::handlePinchZoom(float distance) int prevDist = q_ptr->prevDistance(); if (prevDist > 0 && qAbs(prevDist - newDistance) < maxPinchJitter) return; - q_ptr->setInputState(QAbstract3DInputHandler::InputStatePinching); + m_inputState = QAbstract3DInputHandlerPrivate::InputStatePinching; Q3DCamera *camera = q_ptr->scene()->activeCamera(); int zoomLevel = camera->zoomLevel(); float zoomRate = qSqrt(qSqrt(zoomLevel)); @@ -172,24 +181,27 @@ void QTouch3DInputHandlerPrivate::handleTapAndHold() QPointF distance = m_startHoldPos - m_touchHoldPos; if (distance.manhattanLength() < maxTapAndHoldJitter) { q_ptr->setInputPosition(m_touchHoldPos.toPoint()); - q_ptr->setInputState(QAbstract3DInputHandler::InputStateOnScene); + q_ptr->scene()->setSelectionQueryPosition(m_touchHoldPos.toPoint()); + m_inputState = QAbstract3DInputHandlerPrivate::InputStateSelecting; } } void QTouch3DInputHandlerPrivate::handleSelection(const QPointF &position) { QPointF distance = m_startHoldPos - position; - if (distance.manhattanLength() < maxSelectionJitter) - q_ptr->setInputState(QAbstract3DInputHandler::InputStateOnScene); - else - q_ptr->setInputState(QAbstract3DInputHandler::InputStateNone); + if (distance.manhattanLength() < maxSelectionJitter) { + m_inputState = QAbstract3DInputHandlerPrivate::InputStateSelecting; + q_ptr->scene()->setSelectionQueryPosition(position.toPoint()); + } else { + m_inputState = QAbstract3DInputHandlerPrivate::InputStateNone; + q_ptr->setInputView(QAbstract3DInputHandler::InputViewNone); + } q_ptr->setPreviousInputPos(position.toPoint()); - q_ptr->scene()->setSelectionQueryPosition(position.toPoint()); } void QTouch3DInputHandlerPrivate::handleRotation(const QPointF &position) { - if (QAbstract3DInputHandler::InputStateRotating == q_ptr->inputState()) { + if (QAbstract3DInputHandlerPrivate::InputStateRotating == m_inputState) { Q3DScene *scene = q_ptr->scene(); Q3DCamera *camera = scene->activeCamera(); float xRotation = camera->xRotation(); @@ -209,4 +221,4 @@ void QTouch3DInputHandlerPrivate::handleRotation(const QPointF &position) } } -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION |