summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2015-12-02 10:26:30 +0000
committerSean Harmer <sean.harmer@kdab.com>2015-12-04 19:07:27 +0000
commiteb1f2fb369d41787d9a96bd89018c1951c677b48 (patch)
treed74ef70da153c0d1f203a2eb07c1e5d8978df090 /src
parentad086d65f3a24cf2ec8f0dbd17ed90b4c7d2bcc5 (diff)
Changes to make buttons able to trigger actions
Needs tidying up and improving to make axes work too. Change-Id: I1be0756396110513f2c3bada634814635fbd95a6 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/input/backend/axisactionhandler.cpp4
-rw-r--r--src/input/backend/axisactionpayload_p.h16
-rw-r--r--src/input/backend/updateaxisactionjob.cpp5
-rw-r--r--src/input/backend/updatehandlerjob.cpp2
-rw-r--r--src/quick3d/imports/input/qt3dquick3dinputplugin.cpp2
5 files changed, 25 insertions, 4 deletions
diff --git a/src/input/backend/axisactionhandler.cpp b/src/input/backend/axisactionhandler.cpp
index b0b5db458..0090d73e7 100644
--- a/src/input/backend/axisactionhandler.cpp
+++ b/src/input/backend/axisactionhandler.cpp
@@ -68,9 +68,13 @@ void AxisActionHandler::cleanup()
void AxisActionHandler::setAndTransmitPayload(const AxisActionPayload &payload)
{
+ if (m_lastPayload == payload)
+ return;
+
m_lastPayload = payload;
Qt3DCore::QBackendScenePropertyChangePtr e(new Qt3DCore::QBackendScenePropertyChange(Qt3DCore::NodeUpdated, peerUuid()));
+ e->setTargetNode(peerUuid());
e->setPropertyName("payload");
e->setValue(QVariant::fromValue(payload));
notifyObservers(e);
diff --git a/src/input/backend/axisactionpayload_p.h b/src/input/backend/axisactionpayload_p.h
index 443db26a4..cb5160e76 100644
--- a/src/input/backend/axisactionpayload_p.h
+++ b/src/input/backend/axisactionpayload_p.h
@@ -49,6 +49,7 @@
//
#include <Qt3DInput/qt3dinput_global.h>
+#include <QDebug>
QT_BEGIN_NAMESPACE
@@ -60,18 +61,33 @@ struct AxisUpdate
{
QString name;
float value;
+
+ bool operator ==(const AxisUpdate &other) const
+ {
+ return (name == other.name) && qFuzzyCompare(value, other.value);
+ }
};
struct ActionUpdate
{
QString name;
bool triggered;
+
+ bool operator ==(const ActionUpdate &other) const
+ {
+ return (name == other.name) && (triggered == other.triggered);
+ }
};
struct AxisActionPayload
{
QVector<AxisUpdate> axes;
QVector<ActionUpdate> actions;
+
+ bool operator ==(const AxisActionPayload &other) const
+ {
+ return /*(axes == other.axes) &&*/ (actions == other.actions);
+ }
};
} // Input
diff --git a/src/input/backend/updateaxisactionjob.cpp b/src/input/backend/updateaxisactionjob.cpp
index 9270a1df7..8cb5c01f3 100644
--- a/src/input/backend/updateaxisactionjob.cpp
+++ b/src/input/backend/updateaxisactionjob.cpp
@@ -53,9 +53,10 @@ bool anyOfRequiredKeysPressed(qint64 keys, QAbstractPhysicalDeviceBackendNode *p
bool validKeyWasPressed = false;
for (int i = 0; i < 64; ++i) {
const int individualBit = (1 << i);
- if ((individualBit & keys) && physicalDeviceBackend->isButtonPressed(individualBit))
+ if ((individualBit & keys) && physicalDeviceBackend->isButtonPressed(individualBit)) {
validKeyWasPressed = true;
- break;
+ break;
+ }
}
return validKeyWasPressed;
}
diff --git a/src/input/backend/updatehandlerjob.cpp b/src/input/backend/updatehandlerjob.cpp
index b7f5e960c..ca8bd3579 100644
--- a/src/input/backend/updatehandlerjob.cpp
+++ b/src/input/backend/updatehandlerjob.cpp
@@ -84,7 +84,7 @@ void UpdateHandlerJob::run()
// Check if action state has changed since last frame
// If so -> add to notification payload
- AxisActionPayload payload = m_axisActionHandler->lastPayload();
+ AxisActionPayload payload; // = m_axisActionHandler->lastPayload();
LogicalDevice *logicalDevice = m_handler->logicalDeviceManager()->data(m_logicalDeviceHandle);
Q_FOREACH (const Qt3DCore::QNodeId axesId, logicalDevice->axes()) {
diff --git a/src/quick3d/imports/input/qt3dquick3dinputplugin.cpp b/src/quick3d/imports/input/qt3dquick3dinputplugin.cpp
index 4755e8c29..6d391df2f 100644
--- a/src/quick3d/imports/input/qt3dquick3dinputplugin.cpp
+++ b/src/quick3d/imports/input/qt3dquick3dinputplugin.cpp
@@ -70,7 +70,7 @@ void Qt3DQuick3DInputPlugin::registerTypes(const char *uri)
qmlRegisterType<Qt3DInput::QMouseController>(uri, 2, 0, "MouseController");
qmlRegisterExtendedType<Qt3DInput::QLogicalDevice, Qt3DInput::Input::Quick::Quick3DLogicalDevice>(uri, 2, 0, "LogicalDevice");
- qmlRegisterType<Qt3DInput::QAxisActionHandler>(uri, 2, 0, "ActionHandler");
+ qmlRegisterType<Qt3DInput::QAxisActionHandler>(uri, 2, 0, "AxisActionHandler");
qmlRegisterType<Qt3DInput::QActionInput>(uri, 2, 0, "ActionInput");
qmlRegisterType<Qt3DInput::QAxisInput>(uri, 2, 0, "AxisInput");
qmlRegisterExtendedType<Qt3DInput::QAxis, Qt3DInput::Input::Quick::Quick3DAxis>(uri, 2, 0, "Axis");