summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/input
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2014-01-21 12:01:27 +0200
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-01-21 12:07:00 +0200
commit1b1dfcaadf83c73d3f7c1c1cd893894a3aea0ecb (patch)
tree776666dbf0368ec412fcbb154c2fe27076f6d404 /src/datavisualization/input
parent177f9d385c8cd062c4bad78cf6b794a96fa025ad (diff)
InputState enum divided
Task-number: QTRD-2683 Change-Id: Ib05469ac1bf8c8ed828974a3adb91ecb5f8f1fc9 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/input')
-rw-r--r--src/datavisualization/input/q3dinputhandler.cpp10
-rw-r--r--src/datavisualization/input/qabstract3dinputhandler.cpp39
-rw-r--r--src/datavisualization/input/qabstract3dinputhandler.h17
-rw-r--r--src/datavisualization/input/qabstract3dinputhandler_p.h1
-rw-r--r--src/datavisualization/input/qtouch3dinputhandler.cpp24
5 files changed, 69 insertions, 22 deletions
diff --git a/src/datavisualization/input/q3dinputhandler.cpp b/src/datavisualization/input/q3dinputhandler.cpp
index 27ebf89d..9e19df0c 100644
--- a/src/datavisualization/input/q3dinputhandler.cpp
+++ b/src/datavisualization/input/q3dinputhandler.cpp
@@ -91,17 +91,18 @@ void Q3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mousePos
if (Qt::LeftButton == event->button()) {
if (scene()->isSlicingActive()) {
if (scene()->isPointInPrimarySubView(mousePos)) {
- setInputState(InputStateOnPrimaryView);
+ setInputView(InputViewOnPrimary);
} else if (scene()->isPointInSecondarySubView(mousePos)) {
- setInputState(InputStateOnSecondaryView);
+ setInputView(InputViewOnSecondary);
} else {
- setInputState(InputStateNone);
+ setInputView(InputViewNone);
}
} else {
- setInputState(InputStateOnScene);
// update mouse positions to prevent jumping when releasing or repressing a button
setInputPosition(mousePos);
scene()->setSelectionQueryPosition(mousePos);
+ setInputView(InputViewOnPrimary);
+ setInputState(InputStateSelecting);
}
} else if (Qt::MiddleButton == event->button()) {
// reset rotations
@@ -131,6 +132,7 @@ void Q3DInputHandler::mouseReleaseEvent(QMouseEvent *event, const QPoint &mouseP
setInputPosition(mousePos);
}
setInputState(InputStateNone);
+ setInputView(InputViewNone);
#endif
}
diff --git a/src/datavisualization/input/qabstract3dinputhandler.cpp b/src/datavisualization/input/qabstract3dinputhandler.cpp
index a0811f5b..a369a054 100644
--- a/src/datavisualization/input/qabstract3dinputhandler.cpp
+++ b/src/datavisualization/input/qabstract3dinputhandler.cpp
@@ -38,12 +38,6 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
*
* \value InputStateNone
* Default "no input received" state.
- * \value InputStateOnScene
- * Mouse or touch input received on the 3D scene.
- * \value InputStateOnPrimaryView
- * Mouse or touch input received on the primary view area.
- * \value InputStateOnSecondaryView
- * Mouse or touch input received on the secondary view area.
* \value InputStateRotating
* Rotation of the 3D geometry ongoing.
* \value InputStatePinching
@@ -51,6 +45,19 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
*/
/*!
+ * \enum QAbstract3DInputHandler::InputView
+ *
+ * Predefined input views for mouse and touch based input handlers.
+ *
+ * \value InputViewNone
+ * Mouse or touch not on a view.
+ * \value InputViewOnPrimary
+ * Mouse or touch input received on the primary view area.
+ * \value InputViewOnSecondary
+ * Mouse or touch input received on the secondary view area.
+ */
+
+/*!
* \qmltype AbstractInputHandler3D
* \inqmlmodule QtDataVisualization
* \since QtDataVisualization 1.0
@@ -159,6 +166,25 @@ void QAbstract3DInputHandler::setInputState(InputState inputState)
}
/*!
+ * \property QAbstract3DInputHandler::inputView
+ *
+ * Current enumerated input view based on the view of the processed input events.
+ * When the view changes inputViewChanged() is emitted.
+ */
+QAbstract3DInputHandler::InputView QAbstract3DInputHandler::inputView()
+{
+ return d_ptr->m_inputView;
+}
+
+void QAbstract3DInputHandler::setInputView(InputView inputView)
+{
+ if (inputView != d_ptr->m_inputView) {
+ d_ptr->m_inputView = inputView;
+ emit inputViewChanged(inputView);
+ }
+}
+
+/*!
* \property QAbstract3DInputHandler::inputPosition
*
* Last input position based on the processed input events.
@@ -234,6 +260,7 @@ QAbstract3DInputHandlerPrivate::QAbstract3DInputHandlerPrivate(QAbstract3DInputH
m_prevDistance(0),
m_previousInputPos(QPoint(0,0)),
m_inputState(QAbstract3DInputHandler::InputStateNone),
+ m_inputView(QAbstract3DInputHandler::InputViewNone),
m_inputPosition(QPoint(0,0)),
m_scene(0)
{
diff --git a/src/datavisualization/input/qabstract3dinputhandler.h b/src/datavisualization/input/qabstract3dinputhandler.h
index f8b8ba88..47ae9e1c 100644
--- a/src/datavisualization/input/qabstract3dinputhandler.h
+++ b/src/datavisualization/input/qabstract3dinputhandler.h
@@ -30,20 +30,26 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DInputHandler : public QObject
{
Q_OBJECT
Q_ENUMS(InputState)
+ Q_ENUMS(InputView)
Q_PROPERTY(InputState inputState READ inputState WRITE setInputState NOTIFY inputStateChanged)
+ Q_PROPERTY(InputView inputView READ inputView WRITE setInputView NOTIFY inputViewChanged)
Q_PROPERTY(QPoint inputPosition READ inputPosition WRITE setInputPosition NOTIFY positionChanged)
Q_PROPERTY(Q3DScene *scene READ scene WRITE setScene NOTIFY sceneChanged)
public:
enum InputState {
InputStateNone = 0,
- InputStateOnScene,
- InputStateOnPrimaryView,
- InputStateOnSecondaryView,
+ InputStateSelecting,
InputStateRotating,
InputStatePinching
};
+ enum InputView {
+ InputViewNone = 0,
+ InputViewOnPrimary,
+ InputViewOnSecondary
+ };
+
public:
explicit QAbstract3DInputHandler(QObject *parent = 0);
virtual ~QAbstract3DInputHandler();
@@ -61,6 +67,10 @@ public:
InputState inputState();
void setInputState(InputState inputState);
+ // TODO: Check if the inputView needs to be visible outside of subclasses in the final architecture
+ InputView inputView();
+ void setInputView(InputView inputView);
+
QPoint inputPosition() const;
void setInputPosition(const QPoint &position);
@@ -70,6 +80,7 @@ public:
signals:
void positionChanged(QPoint position);
void inputStateChanged(InputState state);
+ void inputViewChanged(InputView view);
void sceneChanged(const Q3DScene *scene);
protected:
diff --git a/src/datavisualization/input/qabstract3dinputhandler_p.h b/src/datavisualization/input/qabstract3dinputhandler_p.h
index 7e616ec2..c210feee 100644
--- a/src/datavisualization/input/qabstract3dinputhandler_p.h
+++ b/src/datavisualization/input/qabstract3dinputhandler_p.h
@@ -54,6 +54,7 @@ public:
private:
QAbstract3DInputHandler::InputState m_inputState;
+ QAbstract3DInputHandler::InputView m_inputView;
QPoint m_inputPosition;
QRect m_mainViewPort;
diff --git a/src/datavisualization/input/qtouch3dinputhandler.cpp b/src/datavisualization/input/qtouch3dinputhandler.cpp
index 909beb74..3fc5bea4 100644
--- a/src/datavisualization/input/qtouch3dinputhandler.cpp
+++ b/src/datavisualization/input/qtouch3dinputhandler.cpp
@@ -99,24 +99,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);
setInputPosition(pointerPos.toPoint());
}
} else if (event->type() == QEvent::TouchEnd) {
+ setInputView(InputViewNone);
d_ptr->m_holdTimer->stop();
// Handle possible selection
- d_ptr->handleSelection(pointerPos);
+ if (QAbstract3DInputHandler::InputStatePinching != inputState())
+ d_ptr->handleSelection(pointerPos);
} else if (event->type() == QEvent::TouchUpdate) {
if (!scene()->isSlicingActive()) {
d_ptr->m_touchHoldPos = pointerPos;
@@ -172,19 +175,22 @@ 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());
+ q_ptr->setInputState(QAbstract3DInputHandler::InputStateSelecting);
}
}
void QTouch3DInputHandlerPrivate::handleSelection(const QPointF &position)
{
QPointF distance = m_startHoldPos - position;
- if (distance.manhattanLength() < maxSelectionJitter)
- q_ptr->setInputState(QAbstract3DInputHandler::InputStateOnScene);
- else
+ if (distance.manhattanLength() < maxSelectionJitter) {
+ q_ptr->setInputState(QAbstract3DInputHandler::InputStateSelecting);
+ q_ptr->scene()->setSelectionQueryPosition(position.toPoint());
+ } else {
q_ptr->setInputState(QAbstract3DInputHandler::InputStateNone);
+ q_ptr->setInputView(QAbstract3DInputHandler::InputViewNone);
+ }
q_ptr->setPreviousInputPos(position.toPoint());
- q_ptr->scene()->setSelectionQueryPosition(position.toPoint());
}
void QTouch3DInputHandlerPrivate::handleRotation(const QPointF &position)