diff options
-rw-r--r-- | src/gui/util/qshadernode.cpp | 20 | ||||
-rw-r--r-- | src/gui/util/qshadernode_p.h | 6 | ||||
-rw-r--r-- | tests/auto/gui/util/qshadernodes/tst_qshadernodes.cpp | 49 |
3 files changed, 73 insertions, 2 deletions
diff --git a/src/gui/util/qshadernode.cpp b/src/gui/util/qshadernode.cpp index 36fddb2235..f255922c42 100644 --- a/src/gui/util/qshadernode.cpp +++ b/src/gui/util/qshadernode.cpp @@ -93,6 +93,26 @@ void QShaderNode::removePort(const QShaderNodePort &port) m_ports.erase(it); } +QStringList QShaderNode::parameterNames() const +{ + return m_parameters.keys(); +} + +QVariant QShaderNode::parameter(const QString &name) const +{ + return m_parameters.value(name); +} + +void QShaderNode::setParameter(const QString &name, const QVariant &value) +{ + m_parameters.insert(name, value); +} + +void QShaderNode::clearParameter(const QString &name) +{ + m_parameters.remove(name); +} + void QShaderNode::addRule(const QShaderFormat &format, const QShaderNode::Rule &rule) { removeRule(format); diff --git a/src/gui/util/qshadernode_p.h b/src/gui/util/qshadernode_p.h index b3e2d4a841..2f8bf1e438 100644 --- a/src/gui/util/qshadernode_p.h +++ b/src/gui/util/qshadernode_p.h @@ -88,6 +88,11 @@ public: Q_GUI_EXPORT void addPort(const QShaderNodePort &port); Q_GUI_EXPORT void removePort(const QShaderNodePort &port); + Q_GUI_EXPORT QStringList parameterNames() const; + Q_GUI_EXPORT QVariant parameter(const QString &name) const; + Q_GUI_EXPORT void setParameter(const QString &name, const QVariant &value); + Q_GUI_EXPORT void clearParameter(const QString &name); + Q_GUI_EXPORT void addRule(const QShaderFormat &format, const Rule &rule); Q_GUI_EXPORT void removeRule(const QShaderFormat &format); @@ -97,6 +102,7 @@ public: private: QUuid m_uuid; QVector<QShaderNodePort> m_ports; + QHash<QString, QVariant> m_parameters; QVector<QPair<QShaderFormat, QShaderNode::Rule>> m_rules; }; diff --git a/tests/auto/gui/util/qshadernodes/tst_qshadernodes.cpp b/tests/auto/gui/util/qshadernodes/tst_qshadernodes.cpp index 9d7139c880..0280f6559b 100644 --- a/tests/auto/gui/util/qshadernodes/tst_qshadernodes.cpp +++ b/tests/auto/gui/util/qshadernodes/tst_qshadernodes.cpp @@ -70,7 +70,7 @@ private slots: void shouldVerifyPortsEquality_data(); void shouldVerifyPortsEquality(); - void shouldManipulateNodeUuidPortsAndRules(); + void shouldManipulateNodeMembers(); void shouldHandleNodeRulesSupportAndOrder(); }; @@ -336,7 +336,7 @@ void tst_QShaderNodes::shouldVerifyPortsEquality() QCOMPARE(notEqual, !expected); } -void tst_QShaderNodes::shouldManipulateNodeUuidPortsAndRules() +void tst_QShaderNodes::shouldManipulateNodeMembers() { // GIVEN const auto openGLES2 = createFormat(QShaderFormat::OpenGLES, 2, 0); @@ -352,6 +352,7 @@ void tst_QShaderNodes::shouldManipulateNodeUuidPortsAndRules() QCOMPARE(node.type(), QShaderNode::Invalid); QVERIFY(node.uuid().isNull()); QVERIFY(node.ports().isEmpty()); + QVERIFY(node.parameterNames().isEmpty()); QVERIFY(node.availableFormats().isEmpty()); // WHEN @@ -395,6 +396,50 @@ void tst_QShaderNodes::shouldManipulateNodeUuidPortsAndRules() QCOMPARE(node.ports().at(0), secondPort); QVERIFY(node.availableFormats().isEmpty()); + // WHEN + node.setParameter(QStringLiteral("baz"), 42); + + // THEN + QCOMPARE(node.type(), QShaderNode::Input); + QCOMPARE(node.ports().size(), 1); + QCOMPARE(node.ports().at(0), secondPort); + auto parameterNames = node.parameterNames(); + parameterNames.sort(); + QCOMPARE(parameterNames.size(), 1); + QCOMPARE(parameterNames.at(0), QStringLiteral("baz")); + QCOMPARE(node.parameter(QStringLiteral("baz")), QVariant(42)); + QVERIFY(node.availableFormats().isEmpty()); + + // WHEN + node.setParameter(QStringLiteral("bleh"), QStringLiteral("value")); + + // THEN + QCOMPARE(node.type(), QShaderNode::Input); + QCOMPARE(node.ports().size(), 1); + QCOMPARE(node.ports().at(0), secondPort); + parameterNames = node.parameterNames(); + parameterNames.sort(); + QCOMPARE(parameterNames.size(), 2); + QCOMPARE(parameterNames.at(0), QStringLiteral("baz")); + QCOMPARE(parameterNames.at(1), QStringLiteral("bleh")); + QCOMPARE(node.parameter(QStringLiteral("baz")), QVariant(42)); + QCOMPARE(node.parameter(QStringLiteral("bleh")), QVariant(QStringLiteral("value"))); + QVERIFY(node.availableFormats().isEmpty()); + + // WHEN + node.clearParameter(QStringLiteral("baz")); + + // THEN + QCOMPARE(node.type(), QShaderNode::Input); + QCOMPARE(node.ports().size(), 1); + QCOMPARE(node.ports().at(0), secondPort); + parameterNames = node.parameterNames(); + parameterNames.sort(); + QCOMPARE(parameterNames.size(), 1); + QCOMPARE(parameterNames.at(0), QStringLiteral("bleh")); + QCOMPARE(node.parameter(QStringLiteral("baz")), QVariant()); + QCOMPARE(node.parameter(QStringLiteral("bleh")), QVariant(QStringLiteral("value"))); + QVERIFY(node.availableFormats().isEmpty()); // WHEN node.addRule(openGLES2, es2Rule); |