forked from qt-creator/qt-creator
QmlDesigner: Show id-less scenes properly in 3D edit view
Fixes: QDS-6942 Change-Id: I5b7fa966bf9d7321b1735ef0ea7cb904b82f542d Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -800,7 +800,7 @@ void Qt5InformationNodeInstanceServer::updateView3DRect(QObject *view3D)
|
|||||||
viewPortProperty.write(viewPortrect);
|
viewPortProperty.write(viewPortrect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Qt5InformationNodeInstanceServer::updateActiveSceneToEditView3D()
|
void Qt5InformationNodeInstanceServer::updateActiveSceneToEditView3D(bool timerCall)
|
||||||
{
|
{
|
||||||
#ifdef QUICK3D_MODULE
|
#ifdef QUICK3D_MODULE
|
||||||
if (!m_editView3DSetupDone)
|
if (!m_editView3DSetupDone)
|
||||||
@@ -816,12 +816,16 @@ void Qt5InformationNodeInstanceServer::updateActiveSceneToEditView3D()
|
|||||||
ServerNodeInstance sceneInstance = active3DSceneInstance();
|
ServerNodeInstance sceneInstance = active3DSceneInstance();
|
||||||
const QString sceneId = sceneInstance.id();
|
const QString sceneId = sceneInstance.id();
|
||||||
|
|
||||||
// QML item id is updated with separate call, so delay this update until we have it
|
// In case of newly created scene node, QML item id is updated with separate command immediately
|
||||||
if (m_active3DScene && sceneId.isEmpty()) {
|
// after the creation of the node, so delay this update for a moment in case we get it.
|
||||||
m_active3DSceneUpdatePending = true;
|
// The changeId command should already be waiting to be handled, so we can use very short
|
||||||
|
// interval timer. If we haven't gotten the scene id by the time the timer triggers, we can
|
||||||
|
// assume scene node doesn't have an id.
|
||||||
|
if (m_active3DScene && !timerCall && sceneId.isEmpty()) {
|
||||||
|
m_activeSceneIdUpdateTimer.start();
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
m_active3DSceneUpdatePending = false;
|
m_activeSceneIdUpdateTimer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
QMetaObject::invokeMethod(m_editView3DData.rootItem, "setActiveScene", Qt::QueuedConnection,
|
QMetaObject::invokeMethod(m_editView3DData.rootItem, "setActiveScene", Qt::QueuedConnection,
|
||||||
@@ -1266,6 +1270,8 @@ Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceC
|
|||||||
m_inputEventTimer.setSingleShot(true);
|
m_inputEventTimer.setSingleShot(true);
|
||||||
m_renderModelNodeImageViewTimer.setSingleShot(true);
|
m_renderModelNodeImageViewTimer.setSingleShot(true);
|
||||||
m_dynamicAddObjectTimer.setSingleShot(true);
|
m_dynamicAddObjectTimer.setSingleShot(true);
|
||||||
|
m_activeSceneIdUpdateTimer.setInterval(20);
|
||||||
|
m_activeSceneIdUpdateTimer.setSingleShot(true);
|
||||||
|
|
||||||
#ifdef FPS_COUNTER
|
#ifdef FPS_COUNTER
|
||||||
if (!_fpsTimer) {
|
if (!_fpsTimer) {
|
||||||
@@ -1291,6 +1297,7 @@ Qt5InformationNodeInstanceServer::~Qt5InformationNodeInstanceServer()
|
|||||||
m_inputEventTimer.stop();
|
m_inputEventTimer.stop();
|
||||||
m_renderModelNodeImageViewTimer.stop();
|
m_renderModelNodeImageViewTimer.stop();
|
||||||
m_dynamicAddObjectTimer.stop();
|
m_dynamicAddObjectTimer.stop();
|
||||||
|
m_activeSceneIdUpdateTimer.stop();
|
||||||
|
|
||||||
if (m_editView3DData.rootItem)
|
if (m_editView3DData.rootItem)
|
||||||
m_editView3DData.rootItem->disconnect(this);
|
m_editView3DData.rootItem->disconnect(this);
|
||||||
@@ -1724,6 +1731,9 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(const QList<ServerNodeIns
|
|||||||
this, &Qt5InformationNodeInstanceServer::handleInputEvents);
|
this, &Qt5InformationNodeInstanceServer::handleInputEvents);
|
||||||
QObject::connect(&m_dynamicAddObjectTimer, &QTimer::timeout,
|
QObject::connect(&m_dynamicAddObjectTimer, &QTimer::timeout,
|
||||||
this, &Qt5InformationNodeInstanceServer::handleDynamicAddObjectTimeout);
|
this, &Qt5InformationNodeInstanceServer::handleDynamicAddObjectTimeout);
|
||||||
|
QObject::connect(&m_activeSceneIdUpdateTimer, &QTimer::timeout, this, [this]() {
|
||||||
|
Qt5InformationNodeInstanceServer::updateActiveSceneToEditView3D(true);
|
||||||
|
});
|
||||||
|
|
||||||
QString lastSceneId;
|
QString lastSceneId;
|
||||||
auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper);
|
auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper);
|
||||||
@@ -2243,7 +2253,7 @@ void Qt5InformationNodeInstanceServer::changeIds(const ChangeIdsCommand &command
|
|||||||
#ifdef QUICK3D_MODULE
|
#ifdef QUICK3D_MODULE
|
||||||
if (m_editView3DSetupDone) {
|
if (m_editView3DSetupDone) {
|
||||||
ServerNodeInstance sceneInstance = active3DSceneInstance();
|
ServerNodeInstance sceneInstance = active3DSceneInstance();
|
||||||
if (m_active3DSceneUpdatePending) {
|
if (m_activeSceneIdUpdateTimer.isActive()) {
|
||||||
const QString sceneId = sceneInstance.id();
|
const QString sceneId = sceneInstance.id();
|
||||||
if (!sceneId.isEmpty())
|
if (!sceneId.isEmpty())
|
||||||
updateActiveSceneToEditView3D();
|
updateActiveSceneToEditView3D();
|
||||||
|
@@ -129,7 +129,7 @@ private:
|
|||||||
const QList<PropertyName> &propNames,
|
const QList<PropertyName> &propNames,
|
||||||
ValuesModifiedCommand::TransactionOption option);
|
ValuesModifiedCommand::TransactionOption option);
|
||||||
void updateView3DRect(QObject *view3D);
|
void updateView3DRect(QObject *view3D);
|
||||||
void updateActiveSceneToEditView3D();
|
void updateActiveSceneToEditView3D(bool timerCall = false);
|
||||||
void removeNode3D(QObject *node);
|
void removeNode3D(QObject *node);
|
||||||
void resolveSceneRoots();
|
void resolveSceneRoots();
|
||||||
ServerNodeInstance active3DSceneInstance() const;
|
ServerNodeInstance active3DSceneInstance() const;
|
||||||
@@ -165,7 +165,6 @@ private:
|
|||||||
QMultiHash<QObject *, QObject *> m_3DSceneMap; // key: scene root, value: node
|
QMultiHash<QObject *, QObject *> m_3DSceneMap; // key: scene root, value: node
|
||||||
QObject *m_active3DView = nullptr;
|
QObject *m_active3DView = nullptr;
|
||||||
QObject *m_active3DScene = nullptr;
|
QObject *m_active3DScene = nullptr;
|
||||||
bool m_active3DSceneUpdatePending = false;
|
|
||||||
QSet<ServerNodeInstance> m_parentChangedSet;
|
QSet<ServerNodeInstance> m_parentChangedSet;
|
||||||
QList<ServerNodeInstance> m_completedComponentList;
|
QList<ServerNodeInstance> m_completedComponentList;
|
||||||
QList<TokenCommand> m_tokenList;
|
QList<TokenCommand> m_tokenList;
|
||||||
@@ -175,6 +174,7 @@ private:
|
|||||||
QTimer m_renderModelNodeImageViewTimer;
|
QTimer m_renderModelNodeImageViewTimer;
|
||||||
QTimer m_inputEventTimer;
|
QTimer m_inputEventTimer;
|
||||||
QTimer m_dynamicAddObjectTimer;
|
QTimer m_dynamicAddObjectTimer;
|
||||||
|
QTimer m_activeSceneIdUpdateTimer;
|
||||||
#ifdef QUICK3D_PARTICLES_MODULE
|
#ifdef QUICK3D_PARTICLES_MODULE
|
||||||
bool m_particleAnimationPlaying = true;
|
bool m_particleAnimationPlaying = true;
|
||||||
AnimationDriver *m_particleAnimationDriver = nullptr;
|
AnimationDriver *m_particleAnimationDriver = nullptr;
|
||||||
|
Reference in New Issue
Block a user