summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp15
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp7
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp43
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp31
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp8
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));
}