diff options
Diffstat (limited to 'src/runtime/q3dsuippresentation.cpp')
-rw-r--r-- | src/runtime/q3dsuippresentation.cpp | 70 |
1 files changed, 57 insertions, 13 deletions
diff --git a/src/runtime/q3dsuippresentation.cpp b/src/runtime/q3dsuippresentation.cpp index 5ab3fd6..ec366a8 100644 --- a/src/runtime/q3dsuippresentation.cpp +++ b/src/runtime/q3dsuippresentation.cpp @@ -214,10 +214,12 @@ bool convertToFloat(const QStringRef &value, float *v, const char *desc, QXmlStr bool convertToVector2D(const QStringRef &value, QVector2D *v, const char *desc, QXmlStreamReader *reader) { - QVector<QStringRef> floatStrings = value.split(' ', QString::SkipEmptyParts); + QVector<QStringRef> floatStrings = value.split(QLatin1Char(' '), QString::SkipEmptyParts); if (floatStrings.count() != 2) { - if (reader) - reader->raiseError(QObject::tr("Invalid %1 \"%2\"").arg(QString::fromUtf8(desc)).arg(value.toString())); + if (reader) { + reader->raiseError(QObject::tr("Invalid %1 \"%2\"") + .arg(QString::fromUtf8(desc)).arg(value.toString())); + } return false; } float x; @@ -233,10 +235,12 @@ bool convertToVector2D(const QStringRef &value, QVector2D *v, const char *desc, bool convertToVector3D(const QStringRef &value, QVector3D *v, const char *desc, QXmlStreamReader *reader) { - QVector<QStringRef> floatStrings = value.split(' ', QString::SkipEmptyParts); + QVector<QStringRef> floatStrings = value.split(QLatin1Char(' '), QString::SkipEmptyParts); if (floatStrings.count() != 3) { - if (reader) - reader->raiseError(QObject::tr("Invalid %1 \"%2\"").arg(QString::fromUtf8(desc)).arg(value.toString())); + if (reader) { + reader->raiseError(QObject::tr("Invalid %1 \"%2\"") + .arg(QString::fromUtf8(desc)).arg(value.toString())); + } return false; } float x; @@ -254,6 +258,39 @@ bool convertToVector3D(const QStringRef &value, QVector3D *v, const char *desc, return true; } +bool convertToVector4D(const QStringRef &value, QVector4D *v, const char *desc, + QXmlStreamReader *reader) +{ + QVector<QStringRef> floatStrings = value.split(QLatin1Char(' '), QString::SkipEmptyParts); + if (floatStrings.count() != 3 && floatStrings.count() != 4) { + if (reader) { + reader->raiseError(QObject::tr("Invalid %1 \"%2\"") + .arg(QString::fromUtf8(desc)).arg(value.toString())); + } + return false; + } + + float x; + float y; + float z; + float w = 1; + if (!convertToFloat(floatStrings[0], &x, "Vector4D[x]", reader)) + return false; + if (!convertToFloat(floatStrings[1], &y, "Vector4D[y]", reader)) + return false; + if (!convertToFloat(floatStrings[2], &z, "Vector4D[z]", reader)) + return false; + if (floatStrings.count() == 4 && !convertToFloat(floatStrings[3], &w, "Vector4D[w]", reader)) + return false; + + v->setX(x); + v->setY(y); + v->setZ(z); + v->setW(w); + + return true; +} + bool convertToMatrix4x4(const QStringRef &value, QMatrix4x4 *v, const char *desc, QXmlStreamReader *reader) { QVector<QStringRef> floatStrings = value.split(' ', QString::SkipEmptyParts); @@ -345,13 +382,19 @@ QVariant convertToVariant(const QString &value, Q3DS::PropertyType type) case Vector: case Scale: case Rotation: - case Color: { QVector3D v; if (convertToVector3D(&value, &v)) return v; } break; + case Color: + { + QVector4D v; + if (convertToVector4D(&value, &v)) + return v; + } + break; case Boolean: { bool v; @@ -397,9 +440,10 @@ QString convertFromVariant(const QVariant &value) case QVariant::Color: { const QColor c = value.value<QColor>(); - const QVector3D v = QVector3D(c.redF(), c.greenF(), c.blueF()); - return QString(QLatin1String("%1 %2 %3")) - .arg(QString::number(v.x())).arg(QString::number(v.y())).arg(QString::number(v.z())); + const QVector4D v = QVector4D(c.redF(), c.greenF(), c.blueF(), c.alphaF()); + return QString(QLatin1String("%1 %2 %3 %4")) + .arg(QString::number(v.x())).arg(QString::number(v.y())) + .arg(QString::number(v.z())).arg(QString::number(v.w())); } case QVariant::Bool: return value.toBool() ? QLatin1String("true") : QLatin1String("false"); @@ -1081,10 +1125,10 @@ bool parseProperty(const V &attrs, Q3DSGraphObject::PropSetFlags flags, const QS template<typename V> bool parseProperty(const V &attrs, Q3DSGraphObject::PropSetFlags flags, const QString &typeName, const QString &propName, QColor *dst) { - QVector3D rgb; - bool r = ::parseProperty<QVector3D>(attrs, flags, typeName, propName, Q3DS::Color, &rgb, [](const QStringRef &s, QVector3D *v) { return Q3DS::convertToVector3D(s, v); }); + QVector4D rgba; + bool r = ::parseProperty<QVector4D>(attrs, flags, typeName, propName, Q3DS::Color, &rgba, [](const QStringRef &s, QVector4D *v) { return Q3DS::convertToVector4D(s, v); }); if (r) - *dst = QColor::fromRgbF(rgb.x(), rgb.y(), rgb.z()); + *dst = QColor::fromRgbF(rgba.x(), rgba.y(), rgba.z(), rgba.w()); return r; } |