diff options
author | Keränen Pasi <pasi.keranen@digia.com> | 2013-08-22 13:22:21 +0300 |
---|---|---|
committer | Pasi Keränen <pasi.keranen@digia.com> | 2013-08-23 09:33:19 +0300 |
commit | 9db025fbc86e54c72abebf4ef3a146b372ac9e5e (patch) | |
tree | 44045036e84effe3b6cf78dbca0792955d0e53c5 /src/datavis3d | |
parent | 44f83ac64537ca6ac13a97a2c267492bdd288fe7 (diff) |
First implementation of new input handling. Not integrated yet.
Change-Id: I8be494bf072926f4bd9db32572678bf7a4ea674a
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavis3d')
-rw-r--r-- | src/datavis3d/datavis3d.pro | 1 | ||||
-rw-r--r-- | src/datavis3d/engine/abstract3dcontroller.cpp | 13 | ||||
-rw-r--r-- | src/datavis3d/engine/abstract3dcontroller_p.h | 2 | ||||
-rw-r--r-- | src/datavis3d/global/qdatavis3denums.h | 8 | ||||
-rw-r--r-- | src/datavis3d/global/qtdatavis3denums.qdoc | 19 | ||||
-rw-r--r-- | src/datavis3d/input/input.pri | 10 | ||||
-rw-r--r-- | src/datavis3d/input/q3dinputhandler.cpp | 102 | ||||
-rw-r--r-- | src/datavis3d/input/q3dinputhandler.h | 49 | ||||
-rw-r--r-- | src/datavis3d/input/qabstract3dinputhandler.cpp | 163 | ||||
-rw-r--r-- | src/datavis3d/input/qabstract3dinputhandler.h | 86 | ||||
-rw-r--r-- | src/datavis3d/input/qabstract3dinputhandler_p.h | 64 | ||||
-rw-r--r-- | src/datavis3d/input/qtouch3dinputhandler.cpp | 97 | ||||
-rw-r--r-- | src/datavis3d/input/qtouch3dinputhandler.h | 41 |
13 files changed, 655 insertions, 0 deletions
diff --git a/src/datavis3d/datavis3d.pro b/src/datavis3d/datavis3d.pro index ca1a5502..f3496ea1 100644 --- a/src/datavis3d/datavis3d.pro +++ b/src/datavis3d/datavis3d.pro @@ -13,6 +13,7 @@ include($$PWD/global/global.pri) include($$PWD/utils/utils.pri) include($$PWD/axis/axis.pri) include($$PWD/data/data.pri) +include($$PWD/input/input.pri) wince* { # The Microsoft MIPS compiler crashes if /Og is specified. diff --git a/src/datavis3d/engine/abstract3dcontroller.cpp b/src/datavis3d/engine/abstract3dcontroller.cpp index 64dfe786..2f687cea 100644 --- a/src/datavis3d/engine/abstract3dcontroller.cpp +++ b/src/datavis3d/engine/abstract3dcontroller.cpp @@ -22,6 +22,13 @@ #include "qvalueaxis.h" #include "abstract3drenderer_p.h" +#if defined(Q_OS_ANDROID) +#include "qtouch3dinputhandler.h" +#else +#include "q3dinputhandler.h" +#endif + + QT_DATAVIS3D_BEGIN_NAMESPACE Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) : @@ -45,6 +52,12 @@ Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) : m_isDataDirty(true) { m_theme.useColorTheme(QDataVis::ThemeSystem); +#if defined(Q_OS_ANDROID) + m_inputHandler = new QTouch3DInputHandler(); +#else + m_inputHandler = new Q3DInputHandler(); +#endif + m_inputHandler->setCamera(m_cameraHelper); } Abstract3DController::~Abstract3DController() diff --git a/src/datavis3d/engine/abstract3dcontroller_p.h b/src/datavis3d/engine/abstract3dcontroller_p.h index df34e673..fdc19322 100644 --- a/src/datavis3d/engine/abstract3dcontroller_p.h +++ b/src/datavis3d/engine/abstract3dcontroller_p.h @@ -35,6 +35,7 @@ #include "theme_p.h" #include "qabstractaxis.h" #include "drawer_p.h" +#include "qabstract3dinputhandler.h" class QFont; @@ -152,6 +153,7 @@ private: QString m_objFile; protected: + QAbstract3DInputHandler *m_inputHandler; CameraHelper *m_cameraHelper; int m_zoomLevel; QAbstractAxis *m_axisX; diff --git a/src/datavis3d/global/qdatavis3denums.h b/src/datavis3d/global/qdatavis3denums.h index b7469c87..e337430e 100644 --- a/src/datavis3d/global/qdatavis3denums.h +++ b/src/datavis3d/global/qdatavis3denums.h @@ -36,6 +36,14 @@ class QT_DATAVIS3D_EXPORT QDataVis : public QObject Q_ENUMS(LabelTransparency) public: + enum InputState { + InputNone = 0, + InputOnScene, + InputOnOverview, + InputOnSlice, + InputRotating, + InputOnPinch + }; enum MeshStyle { Bars = 0, diff --git a/src/datavis3d/global/qtdatavis3denums.qdoc b/src/datavis3d/global/qtdatavis3denums.qdoc index e22eff09..c9d6c03f 100644 --- a/src/datavis3d/global/qtdatavis3denums.qdoc +++ b/src/datavis3d/global/qtdatavis3denums.qdoc @@ -23,6 +23,25 @@ */ /*! + \enum QtDataVis3D::QDataVis::InputState + + Predefined input states for mouse and touch based input handlers. All states are not valid with all input handlers. + + \value InputNone + Default "no input received" state. + \value InputOnScene + Mouse or touch input received on the 3D scene. + \value InputOnOverview + Mouse or touch input received on the overview area. + \value InputOnSlice + Mouse or touch input received on the slice view area. + \value InputRotating + Rotation of the 3D geometry ongoing. + \value InputOnPinch + Pinch/punch multitouch input received. +*/ + +/*! \enum QtDataVis3D::QDataVis::MeshStyle Predefined mesh types. All styles are not usable with all visualization types. diff --git a/src/datavis3d/input/input.pri b/src/datavis3d/input/input.pri new file mode 100644 index 00000000..89b032da --- /dev/null +++ b/src/datavis3d/input/input.pri @@ -0,0 +1,10 @@ +HEADERS += \ + $$PWD/qabstract3dinputhandler.h \ + $$PWD/q3dinputhandler.h \ + input/qtouch3dinputhandler.h \ + input/qabstract3dinputhandler_p.h + +SOURCES += \ + $$PWD/qabstract3dinputhandler.cpp \ + $$PWD/q3dinputhandler.cpp \ + input/qtouch3dinputhandler.cpp diff --git a/src/datavis3d/input/q3dinputhandler.cpp b/src/datavis3d/input/q3dinputhandler.cpp new file mode 100644 index 00000000..4623a69b --- /dev/null +++ b/src/datavis3d/input/q3dinputhandler.cpp @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** 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 QtDataVis3D 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 +** +****************************************************************************/ +#include "q3dinputhandler.h" + +QT_DATAVIS3D_BEGIN_NAMESPACE + +Q3DInputHandler::Q3DInputHandler() : + QAbstract3DInputHandler() +{ +} + +// Input event listeners +void Q3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mousePos) +{ + QRect mainViewPort = mainViewPortRect(); + if (Qt::LeftButton == event->button()) { + if (slicingActivated()) { + if (mousePos.x() <= mainViewPort.width() + && mousePos.y() <= mainViewPort.height()) { + setInputState(QDataVis::InputOnOverview); + //qDebug() << "Mouse pressed on overview"; + } else { + setInputState(QDataVis::InputOnSlice); + //qDebug() << "Mouse pressed on zoom"; + } + } else { + setInputState(QDataVis::InputOnScene); + // update mouse positions to prevent jumping when releasing or repressing a button + setInputPosition(mousePos); + //qDebug() << "Mouse pressed on scene"; + } + } else if (Qt::MiddleButton == event->button()) { + // reset rotations + setInputPosition(QPoint(0, 0)); + } else if (!slicingActivated() && Qt::RightButton == event->button()) { + // disable rotating when in slice view + setInputState(QDataVis::InputRotating); + // update mouse positions to prevent jumping when releasing or repressing a button + setInputPosition(mousePos); + } + // TODO: Call actual camera class when it's been written. + //m_cameraHelper->updateMousePos(m_mousePos);} +} + +void Q3DInputHandler::mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos) +{ + Q_UNUSED(event); + if (QDataVis::InputRotating == inputState()) { + // update mouse positions to prevent jumping when releasing or repressing a button + setInputPosition(mousePos); + // TODO: Call actual camera class when it's been written. + //m_cameraHelper->updateMousePos(mousePos); + } + setInputState(QDataVis::InputNone); + +} + +void Q3DInputHandler::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) +{ + Q_UNUSED(event); + if (QDataVis::InputRotating == inputState()) + setInputPosition(mousePos); +} + +void Q3DInputHandler::wheelEvent(QWheelEvent *event) +{ + // disable zooming if in slice view + if (slicingActivated()) + return; + + // Adjust zoom level based on what zoom range we're in. + int zoomLevel = QAbstract3DInputHandler::zoomLevel(); + if (zoomLevel > oneToOneZoomLevel) + zoomLevel += event->angleDelta().y() / nearZoomRangeDivider; + else if (zoomLevel > halfSizeZoomLevel) + zoomLevel += event->angleDelta().y() / midZoomRangeDivider; + else + zoomLevel += event->angleDelta().y() / farZoomRangeDivider; + if (zoomLevel > maxZoomLevel) + zoomLevel = maxZoomLevel; + else if (zoomLevel < minZoomLevel) + zoomLevel = minZoomLevel; + + setZoomLevel(zoomLevel); +} + +QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/input/q3dinputhandler.h b/src/datavis3d/input/q3dinputhandler.h new file mode 100644 index 00000000..d995fe3f --- /dev/null +++ b/src/datavis3d/input/q3dinputhandler.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** 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 QtDataVis3D 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 QDEFAULT3DINPUTHANDLER_H +#define QDEFAULT3DINPUTHANDLER_H + +const int minZoomLevel = 10; +const int halfSizeZoomLevel = 50; +const int oneToOneZoomLevel = 100; +const int maxZoomLevel = 500; + +const int nearZoomRangeDivider = 12; +const int midZoomRangeDivider = 60; +const int farZoomRangeDivider = 120; + +#include "qabstract3dinputhandler.h" + +QT_DATAVIS3D_BEGIN_NAMESPACE + +class Q3DInputHandler : public QAbstract3DInputHandler +{ +public: + explicit Q3DInputHandler(); + + // Input event listeners + virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos); + virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos); + virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos); + virtual void wheelEvent(QWheelEvent *event); +}; + +QT_DATAVIS3D_END_NAMESPACE + +#endif // QDEFAULT3DINPUTHANDLER_H diff --git a/src/datavis3d/input/qabstract3dinputhandler.cpp b/src/datavis3d/input/qabstract3dinputhandler.cpp new file mode 100644 index 00000000..5155e2e2 --- /dev/null +++ b/src/datavis3d/input/qabstract3dinputhandler.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** 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 QtDataVis3D 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 +** +****************************************************************************/ +#include "qabstract3dinputhandler.h" + +QT_DATAVIS3D_BEGIN_NAMESPACE + +QAbstract3DInputHandler::QAbstract3DInputHandler() : + QObject(), + d_ptr(new QAbstract3DInputHandlerPrivate(this)) +{ +} + +// Input event listeners +void QAbstract3DInputHandler::mouseDoubleClickEvent(QMouseEvent *event) +{ + Q_UNUSED(event); +} + +void QAbstract3DInputHandler::touchEvent(QTouchEvent *event) +{ + Q_UNUSED(event); +} + +void QAbstract3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mousePos) +{ + Q_UNUSED(event); + Q_UNUSED(mousePos); +} + +void QAbstract3DInputHandler::mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos) +{ + Q_UNUSED(event); + Q_UNUSED(mousePos); +} + +void QAbstract3DInputHandler::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) +{ + Q_UNUSED(event); + Q_UNUSED(mousePos); +} + +void QAbstract3DInputHandler::wheelEvent(QWheelEvent *event) +{ + Q_UNUSED(event); +} + +// Property get/set +QDataVis::InputState QAbstract3DInputHandler::inputState() +{ + return d_ptr->m_inputState; +} + +void QAbstract3DInputHandler::setInputState(const QDataVis::InputState inputState) +{ + if (inputState != d_ptr->m_inputState) { + d_ptr->m_inputState = inputState; + emit inputStateChanged(inputState); + } +} + +QPoint QAbstract3DInputHandler::inputPosition() +{ + return d_ptr->m_inputPosition; +} + +void QAbstract3DInputHandler::setInputPosition(const QPoint position) +{ + if (position != d_ptr->m_inputPosition) { + d_ptr->m_inputPosition = position; + emit positionChanged(position); + } +} + +bool QAbstract3DInputHandler::slicingActivated() +{ + return d_ptr->m_isSlicingActivated; +} + +void QAbstract3DInputHandler::setSlicingActivated(const bool isSlicing) +{ + if (isSlicing != d_ptr->m_isSlicingActivated) { + d_ptr->m_isSlicingActivated = isSlicing; + emit slicingActiveChanged(isSlicing); + } +} + +int QAbstract3DInputHandler::zoomLevel() +{ + return d_ptr->m_zoomLevel; +} + +void QAbstract3DInputHandler::setZoomLevel(const int zoomLevel) +{ + if (zoomLevel != d_ptr->m_zoomLevel) { + d_ptr->m_zoomLevel = zoomLevel; + emit zoomLevelChanged(zoomLevel); + } +} + +void QAbstract3DInputHandler::setPrevDistance(int distance) +{ + d_ptr->m_prevDistance = distance; +} + +int QAbstract3DInputHandler::prevDistance() +{ + return d_ptr->m_prevDistance; +} + + +QRect QAbstract3DInputHandler::mainViewPortRect() +{ + return d_ptr->m_mainViewPort; +} + +void QAbstract3DInputHandler::setMainViewPortRect(const QRect viewPort) +{ + d_ptr->m_mainViewPort = viewPort; +} + +CameraHelper *QAbstract3DInputHandler::camera() +{ + return d_ptr->m_camera; +} + +void QAbstract3DInputHandler::setCamera(CameraHelper *camera) +{ + d_ptr->m_camera = camera; +} + + +QAbstract3DInputHandlerPrivate::QAbstract3DInputHandlerPrivate(QAbstract3DInputHandler *q) : + q_ptr(q), + m_prevDistance(0), + m_inputState(QDataVis::InputNone), + m_isSlicingActivated(false), + m_inputPosition(QPoint(0,0)), + m_zoomLevel(0), + m_camera(0) +{ +} + +QAbstract3DInputHandlerPrivate::~QAbstract3DInputHandlerPrivate() +{ + +} + +QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/input/qabstract3dinputhandler.h b/src/datavis3d/input/qabstract3dinputhandler.h new file mode 100644 index 00000000..5d98afa1 --- /dev/null +++ b/src/datavis3d/input/qabstract3dinputhandler.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** 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 QtDataVis3D 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 QABSTRACT3DINPUTHANDLER_H +#define QABSTRACT3DINPUTHANDLER_H + +#include <QObject> + +#include "qdatavis3denums.h" +#include "qabstract3dinputhandler_p.h" + +QT_DATAVIS3D_BEGIN_NAMESPACE + +class QAbstract3DInputHandler : public QObject +{ + Q_OBJECT + Q_PROPERTY(QtDataVis3D::QDataVis::InputState inputState READ inputState WRITE setInputState NOTIFY inputStateChanged) + Q_PROPERTY(QPoint inputPosition READ inputPosition WRITE setInputPosition NOTIFY positionChanged) + Q_PROPERTY(bool slicingActivated READ slicingActivated WRITE setSlicingActivated NOTIFY slicingActiveChanged) + Q_PROPERTY(int zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged) + Q_PROPERTY(QRect mainViewPortRect READ mainViewPortRect WRITE setMainViewPortRect) + + Q_PROPERTY(CameraHelper *camera READ camera WRITE setCamera) + +private: + QScopedPointer<QAbstract3DInputHandlerPrivate> d_ptr; + +public: + explicit QAbstract3DInputHandler(); + + // Input event listeners + virtual void mouseDoubleClickEvent(QMouseEvent *event); + virtual void touchEvent(QTouchEvent *event); + virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos); + virtual void mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos); + virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos); + virtual void wheelEvent(QWheelEvent *event); + +public: + // Property get/set functions + + // TODO: Check if the inputState needs to be visible outside of subclasses in the final architecture + QDataVis::InputState inputState(); + void setInputState(const QDataVis::InputState inputState); + void setInputPosition(const QPoint position); + QPoint inputPosition(); + void setSlicingActivated(const bool isSlicing); + bool slicingActivated(); + void setZoomLevel(const int zoomLevel); + int zoomLevel(); + QRect mainViewPortRect(); + void setMainViewPortRect(const QRect viewPort); + + // TODO: Modify for proper camera once that is available + CameraHelper *camera(); + void setCamera(CameraHelper *camera); + +protected: + void setPrevDistance(int distance); + int prevDistance(); + +signals: + void positionChanged(QPoint position); + void inputStateChanged(QDataVis::InputState state); + void slicingActiveChanged(bool isSlicing); + void zoomLevelChanged(int zoomLevel); +}; + +QT_DATAVIS3D_END_NAMESPACE + +#endif // QABSTRACT3DINPUTHANDLER_H diff --git a/src/datavis3d/input/qabstract3dinputhandler_p.h b/src/datavis3d/input/qabstract3dinputhandler_p.h new file mode 100644 index 00000000..7c56c2fa --- /dev/null +++ b/src/datavis3d/input/qabstract3dinputhandler_p.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** 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 QtDataVis3D 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 +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the QtDataVis3D API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef QABSTRACT3DINPUTHANDLER_P_H +#define QABSTRACT3DINPUTHANDLER_P_H + +#include <QMouseEvent> + +QT_DATAVIS3D_BEGIN_NAMESPACE + +class QAbstract3DInputHandler; +class CameraHelper; + +class QAbstract3DInputHandlerPrivate +{ +public: + QAbstract3DInputHandlerPrivate(QAbstract3DInputHandler *q); + ~QAbstract3DInputHandlerPrivate(); + +public: + QAbstract3DInputHandler *q_ptr; + int m_prevDistance; + +private: + QDataVis::InputState m_inputState; + bool m_isSlicingActivated; + QPoint m_inputPosition; + int m_zoomLevel; + QRect m_mainViewPort; + + // TODO: Replace with proper camera once it's available + CameraHelper *m_camera; + + friend class QAbstract3DInputHandler; +}; + +QT_DATAVIS3D_END_NAMESPACE + +#endif // QABSTRACT3DINPUTHANDLER_P_H diff --git a/src/datavis3d/input/qtouch3dinputhandler.cpp b/src/datavis3d/input/qtouch3dinputhandler.cpp new file mode 100644 index 00000000..128b8c49 --- /dev/null +++ b/src/datavis3d/input/qtouch3dinputhandler.cpp @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** 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 QtDataVis3D 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 +** +****************************************************************************/ +#include "qtouch3dinputhandler.h" + +QT_DATAVIS3D_BEGIN_NAMESPACE + +QTouch3DInputHandler::QTouch3DInputHandler() : + Q3DInputHandler() +{ +} + +// Input event listeners +void QTouch3DInputHandler::mouseDoubleClickEvent(QMouseEvent *event) +{ + if (!slicingActivated()) { + setInputState( QDataVis::InputOnScene ); + // update mouse positions to prevent jumping when releasing or repressing a button + setInputPosition( event->pos() ); + } +} + +void QTouch3DInputHandler::touchEvent(QTouchEvent *event) +{ + QList<QTouchEvent::TouchPoint> points; + points = event->touchPoints(); + + if (!slicingActivated() && points.count() == 2) { + setInputState( QDataVis::InputOnPinch ); + + QPointF distance = points.at(0).pos() - points.at(1).pos(); + int newDistance = distance.manhattanLength(); + int zoomRate = 1; + int zoomLevel = QAbstract3DInputHandler::zoomLevel(); + if (zoomLevel > 100) + zoomRate = 5; + if (newDistance > prevDistance()) + zoomLevel += zoomRate; + else + zoomLevel -= zoomRate; + if (zoomLevel > 500) + zoomLevel = 500; + else if (zoomLevel < 10) + zoomLevel = 10; + setZoomLevel(zoomLevel); + setPrevDistance(newDistance); + } +} + +void QTouch3DInputHandler::mousePressEvent(QMouseEvent *event, const QPoint &mousePos) +{ + // TODO: This code needs revisiting with new Qt releases and possibly move to using touch events for these as well. + QRect mainViewPort = mainViewPortRect(); + if (Qt::LeftButton == event->button()) { + if (slicingActivated()) { + if (mousePos.x() <= mainViewPort.width() + && mousePos.y() <= mainViewPort.height()) { + setInputState(QDataVis::InputOnOverview); + //qDebug() << "Mouse pressed on overview"; + } else { + setInputState(QDataVis::InputOnSlice); + //qDebug() << "Mouse pressed on zoom"; + } + } else { + setInputState(QDataVis::InputRotating); + // update mouse positions to prevent jumping when releasing or repressing a button + setInputPosition(mousePos); + //qDebug() << "Mouse pressed on scene"; + } + } else if (Qt::MiddleButton == event->button()) { + // reset rotations + setInputPosition(QPoint(0, 0)); + } else if (!slicingActivated() && Qt::RightButton == event->button()) { + // disable rotating when in slice view + setInputState(QDataVis::InputOnScene); + // update mouse positions to prevent jumping when releasing or repressing a button + setInputPosition(mousePos); + } + // TODO: Call actual camera class when it's been written. + //m_cameraHelper->updateMousePos(m_mousePos); +} + +QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/input/qtouch3dinputhandler.h b/src/datavis3d/input/qtouch3dinputhandler.h new file mode 100644 index 00000000..a56f82ce --- /dev/null +++ b/src/datavis3d/input/qtouch3dinputhandler.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** 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 QtDataVis3D 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_H +#define QTOUCH3DINPUTHANDLER_H + +#include "q3dinputhandler.h" + +QT_DATAVIS3D_BEGIN_NAMESPACE + +class QTouch3DInputHandler : public Q3DInputHandler +{ + Q_OBJECT + +public: + explicit QTouch3DInputHandler(); + + // Input event listeners + virtual void mouseDoubleClickEvent(QMouseEvent *event); + virtual void touchEvent(QTouchEvent *event); + virtual void mousePressEvent(QMouseEvent *event, const QPoint &mousePos); +}; + +QT_DATAVIS3D_END_NAMESPACE + +#endif // QTOUCH3DINPUTHANDLER_H |