diff options
Diffstat (limited to 'src')
5 files changed, 95 insertions, 9 deletions
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp index 422eead756..5adce7e932 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp @@ -47,8 +47,9 @@ #include <QApplication> #include <QDir> #include <QFileInfo> -#include <QVector3D> #include <QVector2D> +#include <QVector3D> +#include <QVector4D> #include <QLoggingCategory> @@ -343,6 +344,18 @@ void PropertyEditorQmlBackend::setValue(const QmlObjectNode & , const PropertyNa if (propertyValue) propertyValue->setValue(QVariant(vecValue[i])); } + } else if (value.type() == QVariant::Vector4D) { + const char *suffix[4] = {"_x", "_y", "_z", "_w"}; + auto vecValue = value.value<QVector4D>(); + for (int i = 0; i < 4; ++i) { + PropertyName subPropName(name.size() + 2, '\0'); + subPropName.replace(0, name.size(), name); + subPropName.replace(name.size(), 2, suffix[i]); + auto propertyValue = qobject_cast<PropertyEditorValue *>( + variantToQObject(m_backendValuesPropertyMap.value(QString::fromUtf8(subPropName)))); + if (propertyValue) + propertyValue->setValue(QVariant(vecValue[i])); + } } else { PropertyName propertyName = name; propertyName.replace('.', '_'); diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp index 8feef84877..6fa649e699 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp @@ -227,9 +227,10 @@ void PropertyEditorView::changeValue(const QString &name) removePropertyFromModel(propertyName); } else { // QVector*D(0, 0, 0) detects as null variant though it is valid value - if (castedValue.isValid() && (!castedValue.isNull() - || castedValue.type() == QVariant::Vector2D - || castedValue.type() == QVariant::Vector3D)) { + if (castedValue.isValid() + && (!castedValue.isNull() || castedValue.type() == QVariant::Vector2D + || castedValue.type() == QVariant::Vector3D + || castedValue.type() == QVariant::Vector4D)) { commitVariantValueToModel(propertyName, castedValue); } } diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp index 91bb2c3071..453df15d32 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp @@ -32,8 +32,9 @@ #include <QDebug> #include <QPainter> -#include <QVector3D> #include <QVector2D> +#include <QVector3D> +#include <QVector4D> QT_BEGIN_NAMESPACE void qt_blurImage(QPainter *painter, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); @@ -352,6 +353,28 @@ QVariant NodeInstance::property(const PropertyName &name) const break; } return QVariant(subValue); + } else if (varValue.type() == QVariant::Vector4D) { + auto value = varValue.value<QVector4D>(); + char subProp = name.right(1)[0]; + float subValue = 0.f; + switch (subProp) { + case 'x': + subValue = value.x(); + break; + case 'y': + subValue = value.y(); + break; + case 'z': + subValue = value.z(); + break; + case 'w': + subValue = value.w(); + break; + default: + subValue = 0.f; + break; + } + return QVariant(subValue); } } } @@ -443,6 +466,24 @@ void NodeInstance::setProperty(const PropertyName &name, const QVariant &value) update = true; } newValueVar = newValue; + } else if (oldValue.type() == QVariant::Vector4D) { + QVector4D newValue; + if (oldValue.type() == QVariant::Vector4D) + newValue = oldValue.value<QVector4D>(); + if (name.endsWith(".x")) { + newValue.setX(value.toFloat()); + update = true; + } else if (name.endsWith(".y")) { + newValue.setY(value.toFloat()); + update = true; + } else if (name.endsWith(".z")) { + newValue.setZ(value.toFloat()); + update = true; + } else if (name.endsWith(".w")) { + newValue.setW(value.toFloat()); + update = true; + } + newValueVar = newValue; } if (update) { d->propertyValues.insert(parentPropName, newValueVar); diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index 7eacf17197..33693210a9 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -349,15 +349,35 @@ private: static inline bool isValueType(const TypeName &type) { - static const PropertyTypeList objectValuesList({"QFont", "QPoint", "QPointF", - "QSize", "QSizeF", "QVector3D", "QVector2D", "vector2d", "vector3d", "font"}); + static const PropertyTypeList objectValuesList({"QFont", + "QPoint", + "QPointF", + "QSize", + "QSizeF", + "QVector2D", + "QVector3D", + "QVector4D", + "vector2d", + "vector3d", + "vector4d", + "font"}); return objectValuesList.contains(type); } static inline bool isValueType(const QString &type) { - static const QStringList objectValuesList({"QFont", "QPoint", "QPointF", - "QSize", "QSizeF", "QVector3D", "QVector2D", "vector2d", "vector3d", "font"}); + static const QStringList objectValuesList({"QFont", + "QPoint", + "QPointF", + "QSize", + "QSizeF", + "QVector2D", + "QVector3D", + "QVector4D", + "vector2d", + "vector3d", + "vector4d", + "font"}); return objectValuesList.contains(type); } @@ -1091,6 +1111,9 @@ QVariant::Type NodeMetaInfoPrivate::variantTypeId(const PropertyName &propertyNa if (typeName == "vector3d") return QVariant::Vector3D; + if (typeName == "vector4d") + return QVariant::Vector4D; + return QVariant::nameToType(typeName.data()); } diff --git a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp index 0a22c352b2..cadb3ad34b 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp @@ -169,6 +169,14 @@ QString QmlTextGenerator::toQml(const AbstractProperty &property, int indentDept auto vec = value.value<QVector3D>(); return QStringLiteral("Qt.vector3d(%1, %2, %3)").arg(vec.x()).arg(vec.y()).arg(vec.z()); } + case QMetaType::QVector4D: { + auto vec = value.value<QVector4D>(); + return QStringLiteral("Qt.vector4d(%1, %2, %3, %4)") + .arg(vec.x()) + .arg(vec.y()) + .arg(vec.z()) + .arg(vec.w()); + } default: return QStringLiteral("\"%1\"").arg(escape(stringValue)); } |