summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-12-03 10:58:46 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-12-04 19:07:41 +0000
commit19d8d0443bed987a997f486c70ffb9ad62bc1419 (patch)
tree8d02f1f32f92f7c15fafe1a97eef02dbb46424a8 /src
parentc9961da49757b5d76164a5334ed1f114fffcfca0 (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.cpp19
-rw-r--r--src/input/backend/actioninput_p.h4
-rw-r--r--src/input/backend/axisinput.cpp20
-rw-r--r--src/input/backend/axisinput_p.h4
-rw-r--r--src/input/backend/updateaxisactionjob.cpp11
-rw-r--r--src/input/frontend/qactioninput.cpp7
-rw-r--r--src/input/frontend/qactioninput.h6
-rw-r--r--src/input/frontend/qaxisinput.cpp7
-rw-r--r--src/input/frontend/qaxisinput.h6
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();