forked from qt-creator/qt-creator
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:
@@ -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() {
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user