diff options
author | Juan Jose Casafranca <juan.casafranca@kdab.com> | 2018-09-03 08:50:14 +0200 |
---|---|---|
committer | Juan José Casafranca <juan.casafranca@kdab.com> | 2018-09-08 17:11:06 +0000 |
commit | 5474f28c42ce0c853ddd08a8fd2f31948fcd968b (patch) | |
tree | b57502f385e229f449c2ee1ae857339aeb759f4d /src/gui/util | |
parent | be60b541adb039bd7fed09bf8b2a2848f50d218e (diff) |
Graph loader can load prototypes stored in the graph
Change-Id: Ib0bbfe5b0257bf355e83cc5287fa52b1e0cc3ed6
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/gui/util')
-rw-r--r-- | src/gui/util/qshadergraphloader.cpp | 15 | ||||
-rw-r--r-- | src/gui/util/qshadernodesloader.cpp | 8 | ||||
-rw-r--r-- | src/gui/util/qshadernodesloader_p.h | 1 |
3 files changed, 22 insertions, 2 deletions
diff --git a/src/gui/util/qshadergraphloader.cpp b/src/gui/util/qshadergraphloader.cpp index 8d92c73a5a..99a9f7869e 100644 --- a/src/gui/util/qshadergraphloader.cpp +++ b/src/gui/util/qshadergraphloader.cpp @@ -39,6 +39,8 @@ #include "qshadergraphloader_p.h" +#include "qshadernodesloader_p.h" + #include <QtCore/qdebug.h> #include <QtCore/qiodevice.h> #include <QtCore/qjsonarray.h> @@ -129,6 +131,19 @@ void QShaderGraphLoader::load() bool hasError = false; + const auto prototypesValue = root.value(QStringLiteral("prototypes")); + if (!prototypesValue.isUndefined()) { + if (prototypesValue.isObject()) { + QShaderNodesLoader loader; + loader.load(prototypesValue.toObject()); + m_prototypes.unite(loader.nodes()); + } else { + qWarning() << "Invalid prototypes property, should be an object"; + m_status = Error; + return; + } + } + const auto nodes = nodesValue.toArray(); for (const auto &nodeValue : nodes) { if (!nodeValue.isObject()) { diff --git a/src/gui/util/qshadernodesloader.cpp b/src/gui/util/qshadernodesloader.cpp index db34b6d44d..692653ee44 100644 --- a/src/gui/util/qshadernodesloader.cpp +++ b/src/gui/util/qshadernodesloader.cpp @@ -99,11 +99,15 @@ void QShaderNodesLoader::load() } const auto root = document.object(); + load(root); +} +void QShaderNodesLoader::load(const QJsonObject &prototypesObject) +{ bool hasError = false; - for (const auto &property : root.keys()) { - const auto nodeValue = root.value(property); + for (const auto &property : prototypesObject.keys()) { + const auto nodeValue = prototypesObject.value(property); if (!nodeValue.isObject()) { qWarning() << "Invalid node found"; hasError = true; diff --git a/src/gui/util/qshadernodesloader_p.h b/src/gui/util/qshadernodesloader_p.h index 2696e958b6..0bec871857 100644 --- a/src/gui/util/qshadernodesloader_p.h +++ b/src/gui/util/qshadernodesloader_p.h @@ -78,6 +78,7 @@ public: Q_GUI_EXPORT void setDevice(QIODevice *device) Q_DECL_NOTHROW; Q_GUI_EXPORT void load(); + Q_GUI_EXPORT void load(const QJsonObject &prototypesObject); private: Status m_status; |