summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2015-12-05 18:08:16 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-12-07 19:07:17 +0000
commit32607bdf4c0261f160cfc62c412f76c3c6555996 (patch)
tree645b2cbb59ae6ccd9b09ba5d85a0664e0f0a5ce9 /src
parentb682dd89d62c7e565e87ee4c8fff48805874458f (diff)
MouseController: various fixes
Change-Id: Ie6f90a8b0ffca4a20b90edebb70b41a210246d2a Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/input/backend/inputhandler.cpp2
-rw-r--r--src/input/backend/mousecontroller.cpp21
-rw-r--r--src/input/backend/mousecontroller_p.h11
-rw-r--r--src/input/frontend/qmousecontroller.h2
4 files changed, 26 insertions, 10 deletions
diff --git a/src/input/backend/inputhandler.cpp b/src/input/backend/inputhandler.cpp
index 7a71b78f0..08ae3021d 100644
--- a/src/input/backend/inputhandler.cpp
+++ b/src/input/backend/inputhandler.cpp
@@ -183,9 +183,9 @@ QVector<Qt3DCore::QAspectJobPtr> InputHandler::mouseJobs()
Q_FOREACH (const HMouseController cHandle, m_activeMouseControllers) {
MouseController *controller = m_mouseControllerManager->data(cHandle);
+ controller->updateMouseEvents(events);
// Event dispacthing job
if (!events.isEmpty()) {
- controller->updateMouseEvents(events);
Q_FOREACH (const QNodeId &input, controller->mouseInputs()) {
MouseEventDispatcherJob *job = new MouseEventDispatcherJob(input, events);
job->setInputHandler(this);
diff --git a/src/input/backend/mousecontroller.cpp b/src/input/backend/mousecontroller.cpp
index 2a39c088d..e82ae1b43 100644
--- a/src/input/backend/mousecontroller.cpp
+++ b/src/input/backend/mousecontroller.cpp
@@ -98,9 +98,9 @@ bool MouseController::isButtonPressed(int buttonIdentifier) const
case QMouseController::Left:
return m_mouseState.leftPressed;
case QMouseController::Center:
- return m_mouseState.rightPressed;
- case QMouseController::Right:
return m_mouseState.centerPressed;
+ case QMouseController::Right:
+ return m_mouseState.rightPressed;
default:
break;
}
@@ -114,12 +114,17 @@ QVector<Qt3DCore::QNodeId> MouseController::mouseInputs() const
void MouseController::updateMouseEvents(const QList<QMouseEvent> &events)
{
- Q_FOREACH (const QMouseEvent &e, events) {
- m_mouseState.leftPressed = e.buttons() & (Qt::LeftButton);
- m_mouseState.centerPressed = e.buttons() & (Qt::MiddleButton);
- m_mouseState.rightPressed = e.buttons() & (Qt::RightButton);
- m_mouseState.xAxis = m_previousPos.x() - e.screenPos().x();
- m_mouseState.yAxis = m_previousPos.y() - e.screenPos().y();
+ if (!events.isEmpty()) {
+ Q_FOREACH (const QMouseEvent &e, events) {
+ m_mouseState.leftPressed = e.buttons() & (Qt::LeftButton);
+ m_mouseState.centerPressed = e.buttons() & (Qt::MiddleButton);
+ m_mouseState.rightPressed = e.buttons() & (Qt::RightButton);
+ m_mouseState.xAxis = 0.1 * (e.screenPos().x() - m_previousPos.x());
+ m_mouseState.yAxis = 0.1 * (m_previousPos.y() - e.screenPos().y());
+ m_previousPos = e.screenPos();
+ }
+ } else {
+ m_mouseState = MouseState();
}
}
diff --git a/src/input/backend/mousecontroller_p.h b/src/input/backend/mousecontroller_p.h
index 7d6d55c97..3605659ff 100644
--- a/src/input/backend/mousecontroller_p.h
+++ b/src/input/backend/mousecontroller_p.h
@@ -85,6 +85,15 @@ private:
InputHandler *m_inputHandler;
struct MouseState {
+
+ MouseState()
+ : xAxis(0.0f)
+ , yAxis(0.0f)
+ , leftPressed(false)
+ , rightPressed(false)
+ , centerPressed(false)
+ {}
+
float xAxis;
float yAxis;
bool leftPressed;
@@ -93,7 +102,7 @@ private:
};
MouseState m_mouseState;
- QPoint m_previousPos;
+ QPointF m_previousPos;
};
class MouseControllerFunctor : public Qt3DCore::QBackendNodeFunctor
diff --git a/src/input/frontend/qmousecontroller.h b/src/input/frontend/qmousecontroller.h
index b7be253f8..ce9c2b2bc 100644
--- a/src/input/frontend/qmousecontroller.h
+++ b/src/input/frontend/qmousecontroller.h
@@ -58,12 +58,14 @@ public:
X,
Y
};
+ Q_ENUM(Axis)
enum Button {
Left,
Center,
Right
};
+ Q_ENUM(Button)
int axisCount() const Q_DECL_FINAL;
int buttonCount() const Q_DECL_FINAL;