From dd04551504d8687a9795a52de28380efbc5a091c Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Wed, 12 Jul 2017 14:03:08 +0200 Subject: Extend the parameter support in QShaderGraphLoader for richer types In particular, go through QMetaType/QMetaEnum to deal with enums. Change-Id: I2e847ba328eb46609b86b3dfd6c4dbf532d78b7d Reviewed-by: Sean Harmer --- src/gui/util/qshadergraphloader.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/gui') diff --git a/src/gui/util/qshadergraphloader.cpp b/src/gui/util/qshadergraphloader.cpp index 717a9e18d9..be9017e545 100644 --- a/src/gui/util/qshadergraphloader.cpp +++ b/src/gui/util/qshadergraphloader.cpp @@ -44,6 +44,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -157,7 +158,30 @@ void QShaderGraphLoader::load() if (parametersValue.isObject()) { const auto parametersObject = parametersValue.toObject(); for (const auto ¶meterName : parametersObject.keys()) { - node.setParameter(parameterName, parametersObject.value(parameterName).toVariant()); + const auto parameterValue = parametersObject.value(parameterName); + if (parameterValue.isObject()) { + const auto parameterObject = parameterValue.toObject(); + const auto type = parameterObject.value(QStringLiteral("type")).toString(); + const auto typeId = QMetaType::type(type.toUtf8()); + + const auto value = parameterObject.value(QStringLiteral("value")).toString(); + auto variant = QVariant(value); + + if (QMetaType::typeFlags(typeId) & QMetaType::IsEnumeration) { + const auto metaObject = QMetaType::metaObjectForType(typeId); + const auto className = metaObject->className(); + const auto enumName = type.mid(static_cast(qstrlen(className)) + 2).toUtf8(); + const auto metaEnum = metaObject->enumerator(metaObject->indexOfEnumerator(enumName)); + const auto enumValue = metaEnum.keyToValue(value.toUtf8()); + variant = QVariant(enumValue); + variant.convert(typeId); + } else { + variant.convert(typeId); + } + node.setParameter(parameterName, variant); + } else { + node.setParameter(parameterName, parameterValue.toVariant()); + } } } -- cgit v1.2.3