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 oldCamera
|
||||
property bool view3dRootNodeExists
|
||||
property bool cameraIsSceneObject
|
||||
property bool forceDeactive: false
|
||||
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
|
||||
readonly property size loaderSize: activeLoader && activeLoader.active
|
||||
? Qt.size(activeLoader.width, activeLoader.height)
|
||||
@@ -58,7 +58,7 @@ Rectangle {
|
||||
function updateCamera() {
|
||||
let activeCam = activeCamera()
|
||||
priv.camera = activeCam
|
||||
priv.view3dRootNodeExists = _generalHelper.view3dRootNode(activeCam)
|
||||
priv.cameraIsSceneObject = _generalHelper.isSceneObject(activeCam)
|
||||
}
|
||||
|
||||
function activeCamera() {
|
||||
|
@@ -692,18 +692,19 @@ bool GeneralHelper::isOrthographicCamera(QQuick3DNode *node) const
|
||||
return node && qobject_cast<QQuick3DOrthographicCamera *>(node);
|
||||
}
|
||||
|
||||
QQuick3DNode *GeneralHelper::view3dRootNode(QQuick3DNode *node) const
|
||||
bool GeneralHelper::isSceneObject(QQuick3DNode *node) const
|
||||
{
|
||||
if (!node)
|
||||
return nullptr;
|
||||
return false;
|
||||
|
||||
QQuick3DNode *parentNode = node->parentNode();
|
||||
while (parentNode) {
|
||||
if (parentNode->inherits("QQuick3DSceneRootNode"))
|
||||
return parentNode;
|
||||
parentNode = parentNode->parentNode();
|
||||
}
|
||||
return nullptr;
|
||||
const auto objectPrivate = QQuick3DObjectPrivate::get(node);
|
||||
const QQuick3DSceneManager *importSceneManager = objectPrivate->sceneManager;
|
||||
if (!importSceneManager)
|
||||
return false;
|
||||
|
||||
const QQuick3DObject *sceneObject
|
||||
= importSceneManager->m_nodeMap.value(objectPrivate->spatialNode, nullptr);
|
||||
return sceneObject != nullptr;
|
||||
}
|
||||
|
||||
// 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 isCamera(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,
|
||||
QQuick3DMaterial *material) const;
|
||||
|
||||
|
Reference in New Issue
Block a user