diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/runtime/q3dspresentationcommon_p.h | 1 | ||||
-rw-r--r-- | src/runtime/q3dsscenemanager.cpp | 4 | ||||
-rw-r--r-- | src/runtime/q3dsuippresentation.cpp | 70 |
3 files changed, 61 insertions, 14 deletions
diff --git a/src/runtime/q3dspresentationcommon_p.h b/src/runtime/q3dspresentationcommon_p.h index 006563a..15c77e5 100644 --- a/src/runtime/q3dspresentationcommon_p.h +++ b/src/runtime/q3dspresentationcommon_p.h @@ -91,6 +91,7 @@ bool convertToInt32(const QStringRef &value, qint32 *v, const char *desc = nullp bool convertToBool(const QStringRef &value, bool *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); bool convertToVector2D(const QStringRef &value, QVector2D *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); bool convertToVector3D(const QStringRef &value, QVector3D *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); +bool convertToVector4D(const QStringRef &value, QVector4D *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); bool convertToMatrix4x4(const QStringRef &value, QMatrix4x4 *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); int animatablePropertyTypeToMetaType(Q3DS::PropertyType type); QVariant convertToVariant(const QString &value, Q3DS::PropertyType type); diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp index 59269bc..928f2f8 100644 --- a/src/runtime/q3dsscenemanager.cpp +++ b/src/runtime/q3dsscenemanager.cpp @@ -4271,8 +4271,10 @@ void Q3DSSceneManager::rebuildCompositorLayerChain() int layerDepth = 1; for (Q3DSLayerNode *layer3DS : layers) { BuildLayerQuadFlags flags = 0; - if (layer3DS->layerBackground() == Q3DSLayerNode::Transparent) + if (layer3DS->layerBackground() == Q3DSLayerNode::Transparent + || layer3DS->layerBackground() == Q3DSLayerNode::SolidColor) { flags |= LayerQuadBlend; + } buildLayerQuadEntity(layer3DS, m_compositorParentEntity, tag, flags, layerDepth++); m_compositorEntities.append(layer3DS->attached<Q3DSLayerAttached>()->compositorEntity); 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; } |