diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-12-03 10:58:46 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-12-04 19:07:41 +0000 |
commit | 19d8d0443bed987a997f486c70ffb9ad62bc1419 (patch) | |
tree | 8d02f1f32f92f7c15fafe1a97eef02dbb46424a8 /src | |
parent | c9961da49757b5d76164a5334ed1f114fffcfca0 (diff) |
QAxisInput/QActionInput: use list of int rather than int mask
Needed to allow devices like keyboards which have more than 64 keys
Change-Id: Ia837285ba9c5b7c26d3d89046d7d9f7a4cddb2ba
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/input/backend/actioninput.cpp | 19 | ||||
-rw-r--r-- | src/input/backend/actioninput_p.h | 4 | ||||
-rw-r--r-- | src/input/backend/axisinput.cpp | 20 | ||||
-rw-r--r-- | src/input/backend/axisinput_p.h | 4 | ||||
-rw-r--r-- | src/input/backend/updateaxisactionjob.cpp | 11 | ||||
-rw-r--r-- | src/input/frontend/qactioninput.cpp | 7 | ||||
-rw-r--r-- | src/input/frontend/qactioninput.h | 6 | ||||
-rw-r--r-- | src/input/frontend/qaxisinput.cpp | 7 | ||||
-rw-r--r-- | src/input/frontend/qaxisinput.h | 6 |
9 files changed, 53 insertions, 31 deletions
diff --git a/src/input/backend/actioninput.cpp b/src/input/backend/actioninput.cpp index 694623c50..3371c978d 100644 --- a/src/input/backend/actioninput.cpp +++ b/src/input/backend/actioninput.cpp @@ -45,6 +45,19 @@ namespace Qt3DInput { namespace Input { +namespace { + +QVector<int> listToIntArray(const QVariantList &l) +{ + QVector<int> array; + array.reserve(l.size()); + Q_FOREACH (const QVariant &v, l) + array.push_back(v.toInt()); + return array; +} + +} // anonymous + ActionInput::ActionInput() : Qt3DCore::QBackendNode() , m_keys(0) @@ -56,7 +69,7 @@ void ActionInput::updateFromPeer(Qt3DCore::QNode *peer) { QActionInput *input = static_cast<QActionInput *>(peer); m_enabled = input->isEnabled(); - m_keys = input->keys(); + m_keys = listToIntArray(input->keys()); if (input->sourceDevice()) m_sourceDevice = input->sourceDevice()->id(); } @@ -65,7 +78,7 @@ void ActionInput::cleanup() { m_enabled = false; m_sourceDevice = Qt3DCore::QNodeId(); - m_keys = 0; + m_keys.clear(); } void ActionInput::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) @@ -77,7 +90,7 @@ void ActionInput::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) { m_enabled = propertyChange->value().toBool(); } else if (propertyChange->propertyName() == QByteArrayLiteral("keys")) { - m_keys = propertyChange->value().toInt(); + m_keys = listToIntArray(propertyChange->value().toList()); } } } diff --git a/src/input/backend/actioninput_p.h b/src/input/backend/actioninput_p.h index 3fcea7139..66cf88ccd 100644 --- a/src/input/backend/actioninput_p.h +++ b/src/input/backend/actioninput_p.h @@ -64,13 +64,13 @@ public: void updateFromPeer(Qt3DCore::QNode *peer) Q_DECL_OVERRIDE; void cleanup(); - inline qint64 keys() const { return m_keys; } + inline QVector<int> keys() const { return m_keys; } inline Qt3DCore::QNodeId sourceDevice() const { return m_sourceDevice; } inline bool isEnabled() const { return m_enabled; } void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; private: - qint64 m_keys; + QVector<int> m_keys; Qt3DCore::QNodeId m_sourceDevice; bool m_enabled; }; diff --git a/src/input/backend/axisinput.cpp b/src/input/backend/axisinput.cpp index 71b905aca..f7bb32246 100644 --- a/src/input/backend/axisinput.cpp +++ b/src/input/backend/axisinput.cpp @@ -45,10 +45,22 @@ namespace Qt3DInput { namespace Input { +namespace { + +QVector<int> listToIntArray(const QVariantList &l) +{ + QVector<int> array; + array.reserve(l.size()); + Q_FOREACH (const QVariant &v, l) + array.push_back(v.toInt()); + return array; +} + +} // anonymous + AxisInput::AxisInput() : Qt3DCore::QBackendNode() , m_axis(0) - , m_keys(0) , m_scale(0.0f) , m_enabled(false) { @@ -63,7 +75,7 @@ void AxisInput::updateFromPeer(Qt3DCore::QNode *peer) m_axis = input->axis(); m_scale = input->scale(); m_enabled = input->isEnabled(); - m_keys = input->keys(); + m_keys = listToIntArray(input->keys()); if (input->sourceDevice()) m_sourceDevice = input->sourceDevice()->id(); } @@ -73,7 +85,7 @@ void AxisInput::cleanup() m_axis = 0; m_enabled = false; m_scale = 0.0f; - m_keys = 0; + m_keys.clear(); m_sourceDevice = Qt3DCore::QNodeId(); } @@ -90,7 +102,7 @@ void AxisInput::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) { m_enabled = propertyChange->value().toBool(); } else if (propertyChange->propertyName() == QByteArrayLiteral("keys")) { - m_keys = propertyChange->value().toInt(); + m_keys = listToIntArray(propertyChange->value().toList()); } } } diff --git a/src/input/backend/axisinput_p.h b/src/input/backend/axisinput_p.h index 6ab868483..2b27e2c42 100644 --- a/src/input/backend/axisinput_p.h +++ b/src/input/backend/axisinput_p.h @@ -66,14 +66,14 @@ public: inline int axis() const { return m_axis; } inline float scale() const { return m_scale; } - inline qint64 keys() const { return m_keys; } + inline QVector<int> keys() const { return m_keys; } inline Qt3DCore::QNodeId sourceDevice() const { return m_sourceDevice; } inline bool isEnabled() const { return m_enabled; } void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; private: int m_axis; - qint64 m_keys; + QVector<int> m_keys; Qt3DCore::QNodeId m_sourceDevice; float m_scale; bool m_enabled; diff --git a/src/input/backend/updateaxisactionjob.cpp b/src/input/backend/updateaxisactionjob.cpp index e89f70ec6..5c2a336dc 100644 --- a/src/input/backend/updateaxisactionjob.cpp +++ b/src/input/backend/updateaxisactionjob.cpp @@ -48,12 +48,11 @@ namespace Input { namespace { -bool anyOfRequiredKeysPressed(qint64 keys, QAbstractPhysicalDeviceBackendNode *physicalDeviceBackend) +bool anyOfRequiredKeysPressed(const QVector<int> &keys, QAbstractPhysicalDeviceBackendNode *physicalDeviceBackend) { bool validKeyWasPressed = false; - for (int i = 0; i < 64; ++i) { - const int individualBit = (1 << i); - if ((individualBit & keys) && physicalDeviceBackend->isButtonPressed(individualBit)) { + Q_FOREACH (int key, keys) { + if (physicalDeviceBackend->isButtonPressed(key)) { validKeyWasPressed = true; break; } @@ -120,11 +119,11 @@ void UpdateAxisActionJob::updateAxis(LogicalDevice *device) if (physicalDeviceBackend != Q_NULLPTR) { // Update the value - const qint64 keys = axisInput->keys(); + const QVector<int> keys = axisInput->keys(); // Axis was specified -> we take this as the base value if (axisInput->axis() != -1) axisValue += physicalDeviceBackend->axisValue(axisInput->axis()); - else if (keys != 0) { + else if (!keys.isEmpty()) { // TO DO: Linear Curver for the progression of the scale value if (anyOfRequiredKeysPressed(keys, physicalDeviceBackend)) axisValue += axisInput->scale(); diff --git a/src/input/frontend/qactioninput.cpp b/src/input/frontend/qactioninput.cpp index 54531df06..dd0773dc8 100644 --- a/src/input/frontend/qactioninput.cpp +++ b/src/input/frontend/qactioninput.cpp @@ -46,11 +46,10 @@ class QActionInputPrivate : public Qt3DCore::QNodePrivate public: QActionInputPrivate() : Qt3DCore::QNodePrivate() - , m_keys(0) , m_sourceDevice(Q_NULLPTR) {} - int m_keys; + QVariantList m_keys; QAbstractPhysicalDevice *m_sourceDevice; }; @@ -64,7 +63,7 @@ QActionInput::~QActionInput() QNode::cleanup(); } -int QActionInput::keys() const +QVariantList QActionInput::keys() const { Q_D(const QActionInput); return d->m_keys; @@ -91,7 +90,7 @@ QAbstractPhysicalDevice *QActionInput::sourceDevice() const return d->m_sourceDevice; } -void QActionInput::setKeys(int keys) +void QActionInput::setKeys(const QVariantList &keys) { Q_D(QActionInput); if (d->m_keys != keys) { diff --git a/src/input/frontend/qactioninput.h b/src/input/frontend/qactioninput.h index 537e7e1e0..37e9c7957 100644 --- a/src/input/frontend/qactioninput.h +++ b/src/input/frontend/qactioninput.h @@ -51,7 +51,7 @@ class QT3DINPUTSHARED_EXPORT QActionInput : public Qt3DCore::QNode { Q_OBJECT Q_PROPERTY(Qt3DInput::QAbstractPhysicalDevice *sourceDevice READ sourceDevice WRITE setSourceDevice NOTIFY sourceDeviceChanged) - Q_PROPERTY(int keys READ keys WRITE setKeys NOTIFY keysChanged) + Q_PROPERTY(QVariantList keys READ keys WRITE setKeys NOTIFY keysChanged) public: explicit QActionInput(Qt3DCore::QNode *parent = Q_NULLPTR); @@ -60,8 +60,8 @@ public: void setSourceDevice(QAbstractPhysicalDevice *sourceDevice); QAbstractPhysicalDevice *sourceDevice() const; - void setKeys(int keys); - int keys() const; + void setKeys(const QVariantList &keys); + QVariantList keys() const; Q_SIGNALS: void sourceDeviceChanged(); diff --git a/src/input/frontend/qaxisinput.cpp b/src/input/frontend/qaxisinput.cpp index f854286b4..35f16beb0 100644 --- a/src/input/frontend/qaxisinput.cpp +++ b/src/input/frontend/qaxisinput.cpp @@ -47,13 +47,12 @@ class QAxisInputPrivate : public Qt3DCore::QNodePrivate public: QAxisInputPrivate() : Qt3DCore::QNodePrivate() - , m_keys(0) , m_sourceDevice(Q_NULLPTR) , m_scale(0.0f) , m_axis(-1) {} - int m_keys; + QVariantList m_keys; QAbstractPhysicalDevice *m_sourceDevice; float m_scale; int m_axis; @@ -119,7 +118,7 @@ int QAxisInput::axis() const return d->m_axis; } -void QAxisInput::setKeys(int keys) +void QAxisInput::setKeys(const QVariantList &keys) { Q_D(QAxisInput); if (keys != d->m_keys) { @@ -128,7 +127,7 @@ void QAxisInput::setKeys(int keys) } } -int QAxisInput::keys() const +QVariantList QAxisInput::keys() const { Q_D(const QAxisInput); return d->m_keys; diff --git a/src/input/frontend/qaxisinput.h b/src/input/frontend/qaxisinput.h index 08cc8be6a..b28e85a3a 100644 --- a/src/input/frontend/qaxisinput.h +++ b/src/input/frontend/qaxisinput.h @@ -54,7 +54,7 @@ class QT3DINPUTSHARED_EXPORT QAxisInput : public Qt3DCore::QNode Q_PROPERTY(Qt3DInput::QAbstractPhysicalDevice *sourceDevice READ sourceDevice WRITE setSourceDevice NOTIFY sourceDeviceChanged) Q_PROPERTY(float scale READ scale WRITE setScale NOTIFY scaleChanged) Q_PROPERTY(int axis READ axis WRITE setAxis NOTIFY axisChanged) - Q_PROPERTY(int keys READ keys WRITE setKeys NOTIFY keysChanged) + Q_PROPERTY(QVariantList keys READ keys WRITE setKeys NOTIFY keysChanged) public: explicit QAxisInput(Qt3DCore::QNode *parent = Q_NULLPTR); @@ -69,8 +69,8 @@ public: void setAxis(int axis); int axis() const; - void setKeys(int keys); - int keys() const; + void setKeys(const QVariantList &keys); + QVariantList keys() const; Q_SIGNALS: void sourceDeviceChanged(); |