summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/input/q3dinputhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavis3d/input/q3dinputhandler.cpp')
-rw-r--r--src/datavis3d/input/q3dinputhandler.cpp52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/datavis3d/input/q3dinputhandler.cpp b/src/datavis3d/input/q3dinputhandler.cpp
index 4623a69b..a8bfc19a 100644
--- a/src/datavis3d/input/q3dinputhandler.cpp
+++ b/src/datavis3d/input/q3dinputhandler.cpp
@@ -16,38 +16,46 @@
**
****************************************************************************/
#include "q3dinputhandler.h"
+#include "q3dcamera.h"
+#include "q3dlight.h"
QT_DATAVIS3D_BEGIN_NAMESPACE
-Q3DInputHandler::Q3DInputHandler() :
- QAbstract3DInputHandler()
+Q3DInputHandler::Q3DInputHandler(QObject *parent) :
+ QAbstract3DInputHandler(parent)
+{
+}
+
+Q3DInputHandler::~Q3DInputHandler()
{
}
// 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()) {
+ if (scene()->isSlicingActivated()) {
+ if (scene()->isInputInsideMainView(mousePos)) {
setInputState(QDataVis::InputOnOverview);
//qDebug() << "Mouse pressed on overview";
- } else {
+ } else if (scene()->isInputInsideSliceView(mousePos)) {
setInputState(QDataVis::InputOnSlice);
//qDebug() << "Mouse pressed on zoom";
+ } else {
+ setInputState(QDataVis::InputNone);
}
} else {
setInputState(QDataVis::InputOnScene);
// update mouse positions to prevent jumping when releasing or repressing a button
setInputPosition(mousePos);
+ emit selectionAtPoint(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()) {
+ } else if (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
@@ -63,28 +71,42 @@ void Q3DInputHandler::mouseReleaseEvent(QMouseEvent *event, const QPoint &mouseP
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())
+ if (QDataVis::InputRotating == inputState()) {
+
+ // Calculate mouse movement since last frame
+ QPointF rotations = scene()->camera()->rotations();
+ GLfloat xRotation = rotations.x();
+ GLfloat yRotation = rotations.y();
+ GLfloat mouseMoveX = GLfloat(inputPosition().x() - mousePos.x())
+ / (scene()->viewport().width() / rotationSpeed);
+ GLfloat mouseMoveY = GLfloat(inputPosition().y() - mousePos.y())
+ / (scene()->viewport().height() / rotationSpeed);
+ // Apply to rotations
+ xRotation -= mouseMoveX;
+ yRotation -= mouseMoveY;
+ scene()->camera()->setRotations(QPointF(xRotation, yRotation));
+ scene()->camera()->updateViewMatrix(1.0f);
+
+ setPreviousInputPos(inputPosition());
setInputPosition(mousePos);
+ }
}
void Q3DInputHandler::wheelEvent(QWheelEvent *event)
{
// disable zooming if in slice view
- if (slicingActivated())
+ if (scene()->isSlicingActivated())
return;
// Adjust zoom level based on what zoom range we're in.
- int zoomLevel = QAbstract3DInputHandler::zoomLevel();
+ int zoomLevel = scene()->camera()->zoomLevel();
if (zoomLevel > oneToOneZoomLevel)
zoomLevel += event->angleDelta().y() / nearZoomRangeDivider;
else if (zoomLevel > halfSizeZoomLevel)
@@ -96,7 +118,7 @@ void Q3DInputHandler::wheelEvent(QWheelEvent *event)
else if (zoomLevel < minZoomLevel)
zoomLevel = minZoomLevel;
- setZoomLevel(zoomLevel);
+ scene()->camera()->setZoomLevel(zoomLevel);
}
QT_DATAVIS3D_END_NAMESPACE