diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2015-12-02 10:26:30 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-12-04 19:07:27 +0000 |
commit | eb1f2fb369d41787d9a96bd89018c1951c677b48 (patch) | |
tree | d74ef70da153c0d1f203a2eb07c1e5d8978df090 /src | |
parent | ad086d65f3a24cf2ec8f0dbd17ed90b4c7d2bcc5 (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.cpp | 4 | ||||
-rw-r--r-- | src/input/backend/axisactionpayload_p.h | 16 | ||||
-rw-r--r-- | src/input/backend/updateaxisactionjob.cpp | 5 | ||||
-rw-r--r-- | src/input/backend/updatehandlerjob.cpp | 2 | ||||
-rw-r--r-- | src/quick3d/imports/input/qt3dquick3dinputplugin.cpp | 2 |
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"); |