summaryrefslogtreecommitdiffstats
path: root/src/input
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-12-03 16:10:55 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-12-07 19:06:54 +0000
commitdde3c565835a9ddd0edf980728db4f6ff7393160 (patch)
tree504e1479d28c66e87b973e6fb74831ba95ab39c1 /src/input
parentf6ff4023e42bec8cfe088f27c17f7d309f0a9003 (diff)
QMouseController: converted to QAbstractPhysicalDevice
Change-Id: I532e7378fe459ec201629b3ec3f0c9a69acf691f Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/input')
-rw-r--r--src/input/backend/inputhandler.cpp1
-rw-r--r--src/input/backend/keyboardmousedeviceintegration.cpp6
-rw-r--r--src/input/backend/mousecontroller.cpp44
-rw-r--r--src/input/backend/mousecontroller_p.h21
-rw-r--r--src/input/frontend/qmousecontroller.cpp52
-rw-r--r--src/input/frontend/qmousecontroller.h25
-rw-r--r--src/input/frontend/qmousecontroller_p.h4
7 files changed, 138 insertions, 15 deletions
diff --git a/src/input/backend/inputhandler.cpp b/src/input/backend/inputhandler.cpp
index 5d2b30462..19622862a 100644
--- a/src/input/backend/inputhandler.cpp
+++ b/src/input/backend/inputhandler.cpp
@@ -182,6 +182,7 @@ 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()) {
diff --git a/src/input/backend/keyboardmousedeviceintegration.cpp b/src/input/backend/keyboardmousedeviceintegration.cpp
index 25f851e34..c6f6f776e 100644
--- a/src/input/backend/keyboardmousedeviceintegration.cpp
+++ b/src/input/backend/keyboardmousedeviceintegration.cpp
@@ -79,8 +79,10 @@ QVector<Qt3DCore::QNodeId> KeyboardMouseDeviceIntegration::physicalDevices() con
QAbstractPhysicalDeviceBackendNode *KeyboardMouseDeviceIntegration::physicalDevice(Qt3DCore::QNodeId id) const
{
- return m_handler->keyboardControllerManager()->lookupResource(id);
- // TO DO: When mouse is in it should also be checked as well
+ QAbstractPhysicalDeviceBackendNode *device = m_handler->keyboardControllerManager()->lookupResource(id);
+ if (!device)
+ device = m_handler->mouseControllerManager()->lookupResource(id);
+ return device;
}
} // Input
diff --git a/src/input/backend/mousecontroller.cpp b/src/input/backend/mousecontroller.cpp
index da61f7241..2a39c088d 100644
--- a/src/input/backend/mousecontroller.cpp
+++ b/src/input/backend/mousecontroller.cpp
@@ -49,7 +49,7 @@ namespace Qt3DInput {
namespace Input {
MouseController::MouseController()
- : QBackendNode()
+ : QAbstractPhysicalDeviceBackendNode(ReadOnly)
{
}
@@ -59,7 +59,7 @@ MouseController::~MouseController()
void MouseController::updateFromPeer(Qt3DCore::QNode *peer)
{
- Q_UNUSED(peer);
+ QAbstractPhysicalDeviceBackendNode::updateFromPeer(peer);
}
void MouseController::setInputHandler(InputHandler *handler)
@@ -78,11 +78,51 @@ void MouseController::removeMouseInput(const Qt3DCore::QNodeId &input)
m_mouseInputs.removeOne(input);
}
+float MouseController::axisValue(int axisIdentifier) const
+{
+ switch (axisIdentifier) {
+ case QMouseController::X:
+ return m_mouseState.xAxis;
+ case QMouseController::Y:
+ return m_mouseState.yAxis;
+ break;
+ default:
+ break;
+ }
+ return 0.0f;
+}
+
+bool MouseController::isButtonPressed(int buttonIdentifier) const
+{
+ switch (buttonIdentifier) {
+ case QMouseController::Left:
+ return m_mouseState.leftPressed;
+ case QMouseController::Center:
+ return m_mouseState.rightPressed;
+ case QMouseController::Right:
+ return m_mouseState.centerPressed;
+ default:
+ break;
+ }
+ return false;
+}
+
QVector<Qt3DCore::QNodeId> MouseController::mouseInputs() const
{
return m_mouseInputs;
}
+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();
+ }
+}
+
void MouseController::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
{
Q_UNUSED(e);
diff --git a/src/input/backend/mousecontroller_p.h b/src/input/backend/mousecontroller_p.h
index 69adc78ee..7d6d55c97 100644
--- a/src/input/backend/mousecontroller_p.h
+++ b/src/input/backend/mousecontroller_p.h
@@ -48,7 +48,8 @@
// We mean it.
//
-#include <Qt3DCore/qbackendnode.h>
+#include <Qt3DInput/qabstractphysicaldevicebackendnode.h>
+#include <QMouseEvent>
QT_BEGIN_NAMESPACE
@@ -57,7 +58,7 @@ namespace Input {
class InputHandler;
-class MouseController : public Qt3DCore::QBackendNode
+class MouseController : public Qt3DInput::QAbstractPhysicalDeviceBackendNode
{
public:
MouseController();
@@ -69,14 +70,30 @@ public:
void addMouseInput(const Qt3DCore::QNodeId &input);
void removeMouseInput(const Qt3DCore::QNodeId &input);
+ float axisValue(int axisIdentifier) const Q_DECL_OVERRIDE;
+ bool isButtonPressed(int buttonIdentifier) const Q_DECL_OVERRIDE;
+
QVector<Qt3DCore::QNodeId> mouseInputs() const;
+ void updateMouseEvents(const QList<QMouseEvent> &events);
+
protected:
void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE;
private:
QVector<Qt3DCore::QNodeId> m_mouseInputs;
InputHandler *m_inputHandler;
+
+ struct MouseState {
+ float xAxis;
+ float yAxis;
+ bool leftPressed;
+ bool rightPressed;
+ bool centerPressed;
+ };
+
+ MouseState m_mouseState;
+ QPoint m_previousPos;
};
class MouseControllerFunctor : public Qt3DCore::QBackendNodeFunctor
diff --git a/src/input/frontend/qmousecontroller.cpp b/src/input/frontend/qmousecontroller.cpp
index 461296056..1ec91ec9b 100644
--- a/src/input/frontend/qmousecontroller.cpp
+++ b/src/input/frontend/qmousecontroller.cpp
@@ -45,7 +45,7 @@ QT_BEGIN_NAMESPACE
namespace Qt3DInput {
QMouseControllerPrivate::QMouseControllerPrivate()
- : QNodePrivate()
+ : QAbstractPhysicalDevicePrivate()
{
}
@@ -60,7 +60,7 @@ QMouseControllerPrivate::QMouseControllerPrivate()
* \sa QMouseInput
*/
QMouseController::QMouseController(QNode *parent)
- : QNode(*new QMouseControllerPrivate, parent)
+ : QAbstractPhysicalDevice(*new QMouseControllerPrivate, parent)
{
}
@@ -68,7 +68,7 @@ QMouseController::QMouseController(QNode *parent)
\internal
*/
QMouseController::QMouseController(QMouseControllerPrivate &dd, QNode *parent)
- : QNode(dd, parent)
+ : QAbstractPhysicalDevice(dd, parent)
{
}
@@ -80,6 +80,52 @@ QMouseController::~QMouseController()
QNode::cleanup();
}
+int QMouseController::axisCount() const
+{
+ // TO DO: we could have mouse wheel later on
+ return 2;
+}
+
+int QMouseController::buttonCount() const
+{
+ return 3;
+}
+
+QStringList QMouseController::axisNames() const
+{
+ return QStringList()
+ << QStringLiteral("X")
+ << QStringLiteral("Y");
+}
+
+QStringList QMouseController::buttonNames() const
+{
+ return QStringList()
+ << QStringLiteral("Left")
+ << QStringLiteral("Right")
+ << QStringLiteral("Center");
+}
+
+int QMouseController::axisIdentifier(const QString &name)
+{
+ if (name == QStringLiteral("X"))
+ return X;
+ else if (name == QStringLiteral("Y"))
+ return Y;
+ return -1;
+}
+
+int QMouseController::buttonIdentifier(const QString &name)
+{
+ if (name == QStringLiteral("Left"))
+ return Left;
+ else if (name == QStringLiteral("Right"))
+ return Right;
+ else if (name == QStringLiteral("Center"))
+ return Center;
+ return -1;
+}
+
void QMouseController::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change)
{
Q_UNUSED(change);
diff --git a/src/input/frontend/qmousecontroller.h b/src/input/frontend/qmousecontroller.h
index a0de94db1..b7be253f8 100644
--- a/src/input/frontend/qmousecontroller.h
+++ b/src/input/frontend/qmousecontroller.h
@@ -38,7 +38,7 @@
#define QT3DINPUT_QMOUSECONTROLLER_H
#include <Qt3DInput/qt3dinput_global.h>
-#include <Qt3DCore/qnode.h>
+#include <Qt3DInput/qabstractphysicaldevice.h>
QT_BEGIN_NAMESPACE
@@ -47,16 +47,33 @@ namespace Qt3DInput {
class QMouseControllerPrivate;
class QMouseInput;
-class QT3DINPUTSHARED_EXPORT QMouseController : public Qt3DCore::QNode
+class QT3DINPUTSHARED_EXPORT QMouseController : public Qt3DInput::QAbstractPhysicalDevice
{
Q_OBJECT
-
public:
explicit QMouseController(Qt3DCore::QNode *parent = 0);
+ ~QMouseController();
+
+ enum Axis {
+ X,
+ Y
+ };
+
+ enum Button {
+ Left,
+ Center,
+ Right
+ };
+
+ int axisCount() const Q_DECL_FINAL;
+ int buttonCount() const Q_DECL_FINAL;
+ QStringList axisNames() const Q_DECL_FINAL;
+ QStringList buttonNames() const Q_DECL_FINAL;
+ int axisIdentifier(const QString &name) Q_DECL_FINAL;
+ int buttonIdentifier(const QString &name) Q_DECL_FINAL;
protected:
QMouseController(QMouseControllerPrivate &dd, Qt3DCore::QNode *parent = 0);
- ~QMouseController();
void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) Q_DECL_OVERRIDE;
diff --git a/src/input/frontend/qmousecontroller_p.h b/src/input/frontend/qmousecontroller_p.h
index c04971af3..efffdf51b 100644
--- a/src/input/frontend/qmousecontroller_p.h
+++ b/src/input/frontend/qmousecontroller_p.h
@@ -48,7 +48,7 @@
// We mean it.
//
-#include <private/qnode_p.h>
+#include <private/qabstractphysicaldevice_p.h>
QT_BEGIN_NAMESPACE
@@ -56,7 +56,7 @@ namespace Qt3DInput {
class QMouseController;
-class QMouseControllerPrivate : public Qt3DCore::QNodePrivate
+class QMouseControllerPrivate : public Qt3DInput::QAbstractPhysicalDevicePrivate
{
public:
QMouseControllerPrivate();