From 3ab36eb7fcc2b8ca58193409ce652e5ae58e82b6 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 15 Sep 2020 12:00:25 +1000 Subject: [PATCH] deserialization: tolerate missing vector values --- app/node/input.cpp | 15 +++++++++++++++ app/node/input.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/app/node/input.cpp b/app/node/input.cpp index ecc4906d8..2c5a9d3eb 100644 --- a/app/node/input.cpp +++ b/app/node/input.cpp @@ -381,23 +381,38 @@ QString NodeInput::ValueToString(const DataType& data_type, const QVariant &valu } } +void NodeInput::ValidateVectorString(QStringList* list, int count) +{ + while (list->size() < count) { + list->append(QStringLiteral("0")); + } +} + QVariant NodeInput::StringToValue(const DataType& data_type, const QString &string, bool value_is_a_key_track) { if (!value_is_a_key_track && data_type == kVec2) { QStringList vals = string.split(':'); + ValidateVectorString(&vals, 2); + return QVector2D(vals.at(0).toFloat(), vals.at(1).toFloat()); } else if (!value_is_a_key_track && data_type == kVec3) { QStringList vals = string.split(':'); + ValidateVectorString(&vals, 3); + return QVector3D(vals.at(0).toFloat(), vals.at(1).toFloat(), vals.at(2).toFloat()); } else if (!value_is_a_key_track && data_type == kVec4) { QStringList vals = string.split(':'); + ValidateVectorString(&vals, 4); + return QVector4D(vals.at(0).toFloat(), vals.at(1).toFloat(), vals.at(2).toFloat(), vals.at(3).toFloat()); } else if (!value_is_a_key_track && data_type == kColor) { QStringList vals = string.split(':'); + ValidateVectorString(&vals, 4); + return QVariant::fromValue(Color(vals.at(0).toFloat(), vals.at(1).toFloat(), vals.at(2).toFloat(), vals.at(3).toFloat())); } else if (data_type == kInt) { return QVariant::fromValue(string.toLongLong()); diff --git a/app/node/input.h b/app/node/input.h index 10d09e2a5..2a81c6d40 100644 --- a/app/node/input.h +++ b/app/node/input.h @@ -321,6 +321,8 @@ private: void SaveConnections(QXmlStreamWriter* writer) const; + static void ValidateVectorString(QStringList* list, int count); + /** * @brief Returns whether a data type can be interpolated or not */