summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/qt3d/simple-qml/CameraController.qml28
-rw-r--r--src/input/backend/mousecontroller.cpp13
-rw-r--r--src/input/backend/mousecontroller_p.h1
-rw-r--r--src/input/frontend/qmousecontroller.cpp24
-rw-r--r--src/input/frontend/qmousecontroller.h11
-rw-r--r--src/input/frontend/qmousecontroller_p.h2
6 files changed, 75 insertions, 4 deletions
diff --git a/examples/qt3d/simple-qml/CameraController.qml b/examples/qt3d/simple-qml/CameraController.qml
index bbdc3037f..f3d1b5739 100644
--- a/examples/qt3d/simple-qml/CameraController.qml
+++ b/examples/qt3d/simple-qml/CameraController.qml
@@ -58,6 +58,7 @@ Entity {
property real vz: 0;
property real dx: 0
property real dy: 0
+ property bool fineMotion: false
}
KeyboardController {
@@ -66,6 +67,7 @@ Entity {
MouseController {
id: mouseSourceDevice
+ sensitivity: d.fineMotion ? 0.01 : 0.1
}
LogicalDevice {
@@ -89,7 +91,17 @@ Entity {
keys: [MouseController.Right]
}
]
+ },
+ Action {
+ name: "fineMotion"
+ inputs: [
+ ActionInput {
+ sourceDevice: keyboardSourceDevice
+ keys: [Qt.Key_Shift]
+ }
+ ]
}
+
] // actions
axes: [
@@ -204,10 +216,18 @@ Entity {
case "LMB": {
d.leftMouseButtonPressed = true;
+ break;
}
case "RMB": {
d.rightMouseButtonPressed = true;
+ break;
+ }
+
+ case "fineMotion": {
+ console.log("fineMotion started")
+ d.fineMotion = true;
+ break;
}
}
@@ -220,10 +240,18 @@ Entity {
case "LMB": {
d.leftMouseButtonPressed = false;
+ break;
}
case "RMB": {
d.rightMouseButtonPressed = false;
+ break;
+ }
+
+ case "fineMotion": {
+ console.log("fineMotion finished")
+ d.fineMotion = false;
+ break;
}
}
diff --git a/src/input/backend/mousecontroller.cpp b/src/input/backend/mousecontroller.cpp
index e82ae1b43..2361246f4 100644
--- a/src/input/backend/mousecontroller.cpp
+++ b/src/input/backend/mousecontroller.cpp
@@ -50,6 +50,7 @@ namespace Input {
MouseController::MouseController()
: QAbstractPhysicalDeviceBackendNode(ReadOnly)
+ , m_sensitivity(0.1f)
{
}
@@ -60,6 +61,8 @@ MouseController::~MouseController()
void MouseController::updateFromPeer(Qt3DCore::QNode *peer)
{
QAbstractPhysicalDeviceBackendNode::updateFromPeer(peer);
+ QMouseController *object = static_cast<QMouseController *>(peer);
+ m_sensitivity = object->sensitivity();
}
void MouseController::setInputHandler(InputHandler *handler)
@@ -119,8 +122,8 @@ void MouseController::updateMouseEvents(const QList<QMouseEvent> &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_mouseState.xAxis = m_sensitivity * (e.screenPos().x() - m_previousPos.x());
+ m_mouseState.yAxis = m_sensitivity * (m_previousPos.y() - e.screenPos().y());
m_previousPos = e.screenPos();
}
} else {
@@ -130,7 +133,11 @@ void MouseController::updateMouseEvents(const QList<QMouseEvent> &events)
void MouseController::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
{
- Q_UNUSED(e);
+ if (e->type() == Qt3DCore::NodeUpdated) {
+ Qt3DCore::QScenePropertyChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QScenePropertyChange>(e);
+ if (propertyChange->propertyName() == QByteArrayLiteral("sensitivity"))
+ m_sensitivity = propertyChange->value().toFloat();
+ }
}
MouseControllerFunctor::MouseControllerFunctor(InputHandler *handler)
diff --git a/src/input/backend/mousecontroller_p.h b/src/input/backend/mousecontroller_p.h
index 3605659ff..77db72a72 100644
--- a/src/input/backend/mousecontroller_p.h
+++ b/src/input/backend/mousecontroller_p.h
@@ -103,6 +103,7 @@ private:
MouseState m_mouseState;
QPointF m_previousPos;
+ float m_sensitivity;
};
class MouseControllerFunctor : public Qt3DCore::QBackendNodeFunctor
diff --git a/src/input/frontend/qmousecontroller.cpp b/src/input/frontend/qmousecontroller.cpp
index 1ec91ec9b..a8e3cbc61 100644
--- a/src/input/frontend/qmousecontroller.cpp
+++ b/src/input/frontend/qmousecontroller.cpp
@@ -46,6 +46,7 @@ namespace Qt3DInput {
QMouseControllerPrivate::QMouseControllerPrivate()
: QAbstractPhysicalDevicePrivate()
+ , m_sensitivity(0.1f)
{
}
@@ -126,6 +127,29 @@ int QMouseController::buttonIdentifier(const QString &name)
return -1;
}
+float QMouseController::sensitivity() const
+{
+ Q_D(const QMouseController);
+ return d->m_sensitivity;
+}
+
+void QMouseController::setSensitivity(float value)
+{
+ Q_D(QMouseController);
+ if (qFuzzyCompare(value, d->m_sensitivity))
+ return;
+
+ d->m_sensitivity = value;
+ emit sensitivityChanged(value);
+}
+
+void QMouseController::copy(const Qt3DCore::QNode *ref)
+{
+ QNode::copy(ref);
+ const QMouseController *object = static_cast<const QMouseController *>(ref);
+ d_func()->m_sensitivity = object->d_func()->m_sensitivity;
+}
+
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 ce9c2b2bc..8a03d7e14 100644
--- a/src/input/frontend/qmousecontroller.h
+++ b/src/input/frontend/qmousecontroller.h
@@ -50,6 +50,7 @@ class QMouseInput;
class QT3DINPUTSHARED_EXPORT QMouseController : public Qt3DInput::QAbstractPhysicalDevice
{
Q_OBJECT
+ Q_PROPERTY(float sensitivity READ sensitivity WRITE setSensitivity NOTIFY sensitivityChanged)
public:
explicit QMouseController(Qt3DCore::QNode *parent = 0);
~QMouseController();
@@ -74,9 +75,17 @@ public:
int axisIdentifier(const QString &name) Q_DECL_FINAL;
int buttonIdentifier(const QString &name) Q_DECL_FINAL;
+ float sensitivity() const;
+
+public Q_SLOTS:
+ void setSensitivity(float value);
+
+Q_SIGNALS:
+ void sensitivityChanged(float value);
+
protected:
QMouseController(QMouseControllerPrivate &dd, Qt3DCore::QNode *parent = 0);
-
+ void copy(const Qt3DCore::QNode *ref) Q_DECL_OVERRIDE;
void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) Q_DECL_OVERRIDE;
private:
diff --git a/src/input/frontend/qmousecontroller_p.h b/src/input/frontend/qmousecontroller_p.h
index efffdf51b..4e0faa6f2 100644
--- a/src/input/frontend/qmousecontroller_p.h
+++ b/src/input/frontend/qmousecontroller_p.h
@@ -62,6 +62,8 @@ public:
QMouseControllerPrivate();
Q_DECLARE_PUBLIC(QMouseController)
+
+ float m_sensitivity;
};
} // namespace Qt3DInput