summaryrefslogtreecommitdiffstats
path: root/src/runtime/q3dsuippresentation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/q3dsuippresentation.cpp')
-rw-r--r--src/runtime/q3dsuippresentation.cpp70
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;
}