aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/qml/qmlpuppet
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2022-09-13 11:15:16 +0200
committerEike Ziller <eike.ziller@qt.io>2022-09-13 11:15:16 +0200
commit5ae23f8c6644bc990c6c5132b15d27c0b1287ea7 (patch)
treee303987b0f871158826c3ac08adbdb3b16f054a1 /share/qtcreator/qml/qmlpuppet
parentfbd4775f899cda7a802cbdbec8e596ed8a0358de (diff)
parent67408ac1830a3d2493273cd74fe2941b38ba4b87 (diff)
Merge remote-tracking branch 'origin/8.0'
Conflicts: .github/workflows/build_cmake.yml src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp src/plugins/qmldesigner/components/materialeditor/materialeditorview.h src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp src/plugins/qmldesigner/designercore/model/model.cpp Change-Id: I111b9140375b894a5487cc012b17cc32100bdb8d
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet')
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h2
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h2
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml13
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml11
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml17
-rw-r--r--share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml11
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp32
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h2
8 files changed, 77 insertions, 13 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h
index 356e7f7c84..762054bb9b 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h
+++ b/share/qtcreator/qml/qmlpuppet/commands/puppettocreatorcommand.h
@@ -18,7 +18,7 @@ public:
ActiveSceneChanged,
RenderModelNodePreviewImage,
Import3DSupport,
- ModelAtPos,
+ NodeAtPos,
None };
PuppetToCreatorCommand(Type type, const QVariant &data);
diff --git a/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h b/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h
index b54a86a008..fca9777692 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h
+++ b/share/qtcreator/qml/qmlpuppet/commands/view3dactioncommand.h
@@ -38,7 +38,7 @@ public:
SelectGridColor,
ResetBackgroundColor,
SyncBackgroundColor,
- GetModelAtPos
+ GetNodeAtPos
};
View3DActionCommand(Type type, const QVariant &value);
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml
index 833131b5e1..672aca03c6 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditView3D.qml
@@ -525,6 +525,19 @@ Item {
}
}
+ function gizmoAt(x, y)
+ {
+ for (var i = 0; i < lightIconGizmos.length; ++i) {
+ if (lightIconGizmos[i].visible && lightIconGizmos[i].hasPoint(x, y))
+ return lightIconGizmos[i].targetNode;
+ }
+ for (var i = 0; i < cameraGizmos.length; ++i) {
+ if (cameraGizmos[i].visible && cameraGizmos[i].hasPoint(x, y))
+ return cameraGizmos[i].targetNode;
+ }
+ return null;
+ }
+
Component.onCompleted: {
createEditView();
selectObjects([]);
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml
index 4c3dd38598..e44cf74d08 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/IconGizmo.qml
@@ -30,6 +30,17 @@ Item {
signal clicked(Node node, bool multi)
+ function hasPoint(x, y)
+ {
+ if (!view3D || !targetNode)
+ return false;
+
+ var point = view3D.mapToItem(iconMouseArea, x, y);
+
+ return point.x >= iconMouseArea.x && (point.x <= iconMouseArea.x + iconMouseArea.width)
+ && point.y >= iconMouseArea.y && (point.y <= iconMouseArea.y + iconMouseArea.height);
+ }
+
onSelectedChanged: {
if (selected)
hasMouse = false;
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml
index ccb05244f3..915feea4f2 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditView3D.qml
@@ -648,6 +648,23 @@ Item {
}
}
+ function gizmoAt(x, y)
+ {
+ for (var i = 0; i < lightIconGizmos.length; ++i) {
+ if (lightIconGizmos[i].visible && lightIconGizmos[i].hasPoint(x, y))
+ return lightIconGizmos[i].targetNode;
+ }
+ for (var i = 0; i < cameraGizmos.length; ++i) {
+ if (cameraGizmos[i].visible && cameraGizmos[i].hasPoint(x, y))
+ return cameraGizmos[i].targetNode;
+ }
+ for (var i = 0; i < particleSystemIconGizmos.length; ++i) {
+ if (particleSystemIconGizmos[i].visible && particleSystemIconGizmos[i].hasPoint(x, y))
+ return particleSystemIconGizmos[i].targetNode;
+ }
+ return null;
+ }
+
Component.onCompleted: {
createEditView();
selectObjects([]);
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml
index cc0fdea291..70ee9d51f1 100644
--- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/IconGizmo.qml
@@ -31,6 +31,17 @@ Item {
signal clicked(Node node, bool multi)
+ function hasPoint(x, y)
+ {
+ if (!view3D || !targetNode)
+ return false;
+
+ var point = view3D.mapToItem(iconMouseArea, x, y);
+
+ return point.x >= iconMouseArea.x && (point.x <= iconMouseArea.x + iconMouseArea.width)
+ && point.y >= iconMouseArea.y && (point.y <= iconMouseArea.y + iconMouseArea.height);
+ }
+
onSelectedChanged: {
if (selected)
hasMouse = false;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index 1ac414185d..b99f4c4282 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
@@ -272,7 +272,7 @@ void Qt5InformationNodeInstanceServer::handleInputEvents()
// Context menu requested
if (command.button() == Qt::RightButton && command.modifiers() == Qt::NoModifier)
- getModelAtPos(command.pos());
+ getNodeAtPos(command.pos());
}
}
@@ -386,7 +386,7 @@ void Qt5InformationNodeInstanceServer::removeRotationBlocks(
#endif
}
-void Qt5InformationNodeInstanceServer::getModelAtPos(const QPointF &pos)
+void Qt5InformationNodeInstanceServer::getNodeAtPos(const QPointF &pos)
{
#ifdef QUICK3D_MODULE
// pick a Quick3DModel at view position
@@ -398,13 +398,25 @@ void Qt5InformationNodeInstanceServer::getModelAtPos(const QPointF &pos)
QObject *obj = qvariant_cast<QObject *>(editViewProp.read());
QQuick3DViewport *editView = qobject_cast<QQuick3DViewport *>(obj);
- QQuick3DModel *hitModel = helper->pickViewAt(editView, pos.x(), pos.y()).objectHit();
-
- // filter out picks of models created dynamically or inside components
- QQuick3DModel *resolvedPick = qobject_cast<QQuick3DModel *>(helper->resolvePick(hitModel));
+ // Non-model nodes with icon gizmos are also valid results
+ QVariant gizmoVar;
+ QMetaObject::invokeMethod(m_editView3DData.rootItem, "gizmoAt", Qt::DirectConnection,
+ Q_RETURN_ARG(QVariant, gizmoVar),
+ Q_ARG(QVariant, pos.x()),
+ Q_ARG(QVariant, pos.y()));
+ QObject *gizmoObj = qvariant_cast<QObject *>(gizmoVar);
+ QVariant instance = -1;
+
+ if (gizmoObj && hasInstanceForObject(gizmoObj)) {
+ instance = instanceForObject(gizmoObj).instanceId();
+ } else {
+ QQuick3DModel *hitModel = helper->pickViewAt(editView, pos.x(), pos.y()).objectHit();
+ QObject *resolvedPick = helper->resolvePick(hitModel);
+ if (hasInstanceForObject(resolvedPick))
+ instance = instanceForObject(resolvedPick).instanceId();
+ }
- QVariant instance = resolvedPick ? instanceForObject(resolvedPick).instanceId() : -1;
- nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::ModelAtPos, instance});
+ nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::NodeAtPos, instance});
#else
Q_UNUSED(pos)
#endif
@@ -2387,8 +2399,8 @@ void Qt5InformationNodeInstanceServer::view3DAction(const View3DActionCommand &c
break;
#endif
#ifdef QUICK3D_MODULE
- case View3DActionCommand::GetModelAtPos: {
- getModelAtPos(command.value().toPointF());
+ case View3DActionCommand::GetNodeAtPos: {
+ getNodeAtPos(command.value().toPointF());
return;
}
#endif
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
index a37fc42f9c..2099c184d9 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
@@ -126,7 +126,7 @@ private:
void updateMaterialPreviewData(const QVector<PropertyValueContainer> &valueChanges);
void updateRotationBlocks(const QVector<PropertyValueContainer> &valueChanges);
void removeRotationBlocks(const QVector<qint32> &instanceIds);
- void getModelAtPos(const QPointF &pos);
+ void getNodeAtPos(const QPointF &pos);
void createAuxiliaryQuickView(const QUrl &url, RenderViewData &viewData);
#ifdef QUICK3D_PARTICLES_MODULE