QmlDesigner: Camera should be a scene object

SceneManager should exist for the camera node. Otherwise, we shouldn't
show the camera display.

Fixes: QDS-13582
Fixes: QDS-13583
Pick-to: 4.6
Change-Id: I03984172c6ac2faffa5381f7fb227396076e7527
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Ali Kianian
2024-09-10 15:56:19 +03:00
parent 45cebed389
commit bb25a4d196
3 changed files with 14 additions and 13 deletions

View File

@@ -46,10 +46,10 @@ Rectangle {
property Camera camera property Camera camera
property Camera oldCamera property Camera oldCamera
property bool view3dRootNodeExists property bool cameraIsSceneObject
property bool forceDeactive: false property bool forceDeactive: false
readonly property bool cameraViewIsOn: !forceDeactive && (cameraView.alwaysOn || cameraView.showCameraView) && priv.camera readonly property bool cameraViewIsOn: !forceDeactive && (cameraView.alwaysOn || cameraView.showCameraView) && priv.camera
readonly property bool cameraHasValidScene: priv.cameraViewIsOn && priv.view3dRootNodeExists readonly property bool cameraHasValidScene: priv.cameraViewIsOn && priv.cameraIsSceneObject
property Loader activeLoader property Loader activeLoader
readonly property size loaderSize: activeLoader && activeLoader.active readonly property size loaderSize: activeLoader && activeLoader.active
? Qt.size(activeLoader.width, activeLoader.height) ? Qt.size(activeLoader.width, activeLoader.height)
@@ -58,7 +58,7 @@ Rectangle {
function updateCamera() { function updateCamera() {
let activeCam = activeCamera() let activeCam = activeCamera()
priv.camera = activeCam priv.camera = activeCam
priv.view3dRootNodeExists = _generalHelper.view3dRootNode(activeCam) priv.cameraIsSceneObject = _generalHelper.isSceneObject(activeCam)
} }
function activeCamera() { function activeCamera() {

View File

@@ -692,18 +692,19 @@ bool GeneralHelper::isOrthographicCamera(QQuick3DNode *node) const
return node && qobject_cast<QQuick3DOrthographicCamera *>(node); return node && qobject_cast<QQuick3DOrthographicCamera *>(node);
} }
QQuick3DNode *GeneralHelper::view3dRootNode(QQuick3DNode *node) const bool GeneralHelper::isSceneObject(QQuick3DNode *node) const
{ {
if (!node) if (!node)
return nullptr; return false;
QQuick3DNode *parentNode = node->parentNode(); const auto objectPrivate = QQuick3DObjectPrivate::get(node);
while (parentNode) { const QQuick3DSceneManager *importSceneManager = objectPrivate->sceneManager;
if (parentNode->inherits("QQuick3DSceneRootNode")) if (!importSceneManager)
return parentNode; return false;
parentNode = parentNode->parentNode();
} const QQuick3DObject *sceneObject
return nullptr; = importSceneManager->m_nodeMap.value(objectPrivate->spatialNode, nullptr);
return sceneObject != nullptr;
} }
// Emitter gizmo model creation is done in C++ as creating dynamic properties and // Emitter gizmo model creation is done in C++ as creating dynamic properties and

View File

@@ -97,7 +97,7 @@ public:
Q_INVOKABLE bool isPickable(QQuick3DNode *node) const; Q_INVOKABLE bool isPickable(QQuick3DNode *node) const;
Q_INVOKABLE bool isCamera(QQuick3DNode *node) const; Q_INVOKABLE bool isCamera(QQuick3DNode *node) const;
Q_INVOKABLE bool isOrthographicCamera(QQuick3DNode *node) const; Q_INVOKABLE bool isOrthographicCamera(QQuick3DNode *node) const;
Q_INVOKABLE QQuick3DNode *view3dRootNode(QQuick3DNode *node) const; Q_INVOKABLE bool isSceneObject(QQuick3DNode *node) const;
Q_INVOKABLE QQuick3DNode *createParticleEmitterGizmoModel(QQuick3DNode *emitter, Q_INVOKABLE QQuick3DNode *createParticleEmitterGizmoModel(QQuick3DNode *emitter,
QQuick3DMaterial *material) const; QQuick3DMaterial *material) const;