forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/6.0'
Conflicts: cmake/QtCreatorIDEBranding.cmake qbs/modules/qtc/qtc.qbs qtcreator_ide_branding.pri Change-Id: I32991a77e52831dd2e24cf4a51ec252998c2d743
This commit is contained in:
@@ -215,7 +215,11 @@ QVector4D GeneralHelper::focusNodesToCamera(QQuick3DCamera *camera, float defaul
|
||||
bounds = geometry->bounds();
|
||||
} else {
|
||||
auto bufferManager = context->bufferManager();
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 3, 0)
|
||||
bounds = renderModel->getModelBounds(bufferManager);
|
||||
#else
|
||||
bounds = bufferManager->getModelBounds(renderModel);
|
||||
#endif
|
||||
}
|
||||
|
||||
center = renderModel->globalTransform.map(bounds.center());
|
||||
@@ -333,7 +337,7 @@ void GeneralHelper::unregisterGizmoTarget(QQuick3DNode *node)
|
||||
}
|
||||
}
|
||||
|
||||
bool GeneralHelper::isLocked(QQuick3DNode *node)
|
||||
bool GeneralHelper::isLocked(QQuick3DNode *node) const
|
||||
{
|
||||
if (node) {
|
||||
QVariant lockValue = node->property("_edit3dLocked");
|
||||
@@ -342,7 +346,7 @@ bool GeneralHelper::isLocked(QQuick3DNode *node)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GeneralHelper::isHidden(QQuick3DNode *node)
|
||||
bool GeneralHelper::isHidden(QQuick3DNode *node) const
|
||||
{
|
||||
if (node) {
|
||||
QVariant hideValue = node->property("_edit3dHidden");
|
||||
@@ -351,8 +355,18 @@ bool GeneralHelper::isHidden(QQuick3DNode *node)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GeneralHelper::isPickable(QQuick3DNode *node) {
|
||||
return (node && !isLocked(node) && !isHidden(node) && node->visible());
|
||||
bool GeneralHelper::isPickable(QQuick3DNode *node) const
|
||||
{
|
||||
if (!node)
|
||||
return false;
|
||||
|
||||
QQuick3DNode *n = node;
|
||||
while (n) {
|
||||
if (!n->visible() || isLocked(n) || isHidden(n))
|
||||
return false;
|
||||
n = n->parentNode();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void GeneralHelper::storeToolState(const QString &sceneId, const QString &tool, const QVariant &state,
|
||||
|
||||
@@ -80,9 +80,9 @@ public:
|
||||
|
||||
Q_INVOKABLE void registerGizmoTarget(QQuick3DNode *node);
|
||||
Q_INVOKABLE void unregisterGizmoTarget(QQuick3DNode *node);
|
||||
Q_INVOKABLE bool isLocked(QQuick3DNode *node);
|
||||
Q_INVOKABLE bool isHidden(QQuick3DNode *node);
|
||||
Q_INVOKABLE bool isPickable(QQuick3DNode *node);
|
||||
Q_INVOKABLE bool isLocked(QQuick3DNode *node) const;
|
||||
Q_INVOKABLE bool isHidden(QQuick3DNode *node) const;
|
||||
Q_INVOKABLE bool isPickable(QQuick3DNode *node) const;
|
||||
|
||||
Q_INVOKABLE void storeToolState(const QString &sceneId, const QString &tool,
|
||||
const QVariant &state, int delayEmit = 0);
|
||||
|
||||
@@ -898,8 +898,22 @@ bool MouseArea3D::eventFilter(QObject *, QEvent *event)
|
||||
// a problem
|
||||
onCircle = false;
|
||||
if (m_pickNode) {
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 2, 1)
|
||||
QQuick3DPickResult pr = m_view3D->pick(float(mousePos.x()), float(mousePos.y()));
|
||||
pickSuccess = pr.objectHit() == m_pickNode;
|
||||
#else
|
||||
// With the introduction of global picking API,
|
||||
// we need to pick all as various other geometries can often be the first
|
||||
// pick result, such as camera frustum or light geometry
|
||||
const QList<QQuick3DPickResult> results = m_view3D->pickAll(float(mousePos.x()),
|
||||
float(mousePos.y()));
|
||||
for (const auto &pr : results) {
|
||||
if (pr.objectHit() == m_pickNode) {
|
||||
pickSuccess = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,7 +306,11 @@ void SelectionBoxGeometry::getBounds(
|
||||
#endif
|
||||
if (!context.isNull()) {
|
||||
auto bufferManager = context->bufferManager();
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 3, 0)
|
||||
QSSGBounds3 bounds = renderModel->getModelBounds(bufferManager);
|
||||
#else
|
||||
QSSGBounds3 bounds = bufferManager->getModelBounds(renderModel);
|
||||
#endif
|
||||
QVector3D center = bounds.center();
|
||||
QVector3D extents = bounds.extents();
|
||||
QVector3D localMin = center - extents;
|
||||
|
||||
+28
@@ -99,6 +99,7 @@
|
||||
#include <QtQuick3D/private/qquick3dabstractlight_p.h>
|
||||
#include <QtQuick3D/private/qquick3dviewport_p.h>
|
||||
#include <QtQuick3D/private/qquick3dscenerootnode_p.h>
|
||||
#include <QtQuick3D/private/qquick3drepeater_p.h>
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
#include "../editor3d/qt5compat/qquick3darealight_p.h"
|
||||
#endif
|
||||
@@ -1226,6 +1227,7 @@ Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceC
|
||||
m_inputEventTimer.setSingleShot(true);
|
||||
m_renderModelNodeImageViewTimer.setSingleShot(true);
|
||||
m_modelNode3DImageViewAsyncData.timer.setSingleShot(true);
|
||||
m_repeaterAddObjectTimer.setSingleShot(true);
|
||||
|
||||
#ifdef FPS_COUNTER
|
||||
if (!_fpsTimer) {
|
||||
@@ -1251,6 +1253,7 @@ Qt5InformationNodeInstanceServer::~Qt5InformationNodeInstanceServer()
|
||||
m_inputEventTimer.stop();
|
||||
m_renderModelNodeImageViewTimer.stop();
|
||||
m_modelNode3DImageViewAsyncData.timer.stop();
|
||||
m_repeaterAddObjectTimer.stop();
|
||||
|
||||
if (m_editView3DData.rootItem)
|
||||
m_editView3DData.rootItem->disconnect(this);
|
||||
@@ -1394,6 +1397,22 @@ void Qt5InformationNodeInstanceServer::handleSelectionChangeTimeout()
|
||||
changeSelection(m_lastSelectionChangeCommand);
|
||||
}
|
||||
|
||||
void Qt5InformationNodeInstanceServer::handleRepeaterAddObjectTimeout()
|
||||
{
|
||||
#ifdef QUICK3D_MODULE
|
||||
for (auto obj : std::as_const(m_addObjectRepeaters)) {
|
||||
if (auto repObj = qobject_cast<QQuick3DRepeater *>(obj)) {
|
||||
if (hasInstanceForObject(repObj)) {
|
||||
ServerNodeInstance instance = instanceForObject(repObj);
|
||||
handleInstanceHidden(instance, instance.internalInstance()->isHiddenInEditor(),
|
||||
false);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
m_addObjectRepeaters.clear();
|
||||
}
|
||||
|
||||
void Qt5InformationNodeInstanceServer::createCameraAndLightGizmos(
|
||||
const QList<ServerNodeInstance> &instanceList) const
|
||||
{
|
||||
@@ -1645,6 +1664,8 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(const QList<ServerNodeIns
|
||||
this, &Qt5InformationNodeInstanceServer::handleInputEvents);
|
||||
QObject::connect(&m_modelNode3DImageViewAsyncData.timer, &QTimer::timeout,
|
||||
this, &Qt5InformationNodeInstanceServer::modelNode3DImageViewRenderStep);
|
||||
QObject::connect(&m_repeaterAddObjectTimer, &QTimer::timeout,
|
||||
this, &Qt5InformationNodeInstanceServer::handleRepeaterAddObjectTimeout);
|
||||
|
||||
QString lastSceneId;
|
||||
auto helper = qobject_cast<QmlDesigner::Internal::GeneralHelper *>(m_3dHelper);
|
||||
@@ -1803,6 +1824,7 @@ void Qt5InformationNodeInstanceServer::clearScene(const ClearSceneCommand &comma
|
||||
|
||||
m_parentChangedSet.clear();
|
||||
m_completedComponentList.clear();
|
||||
m_addObjectRepeaters.clear();
|
||||
}
|
||||
|
||||
void Qt5InformationNodeInstanceServer::createScene(const CreateSceneCommand &command)
|
||||
@@ -2293,6 +2315,12 @@ bool Qt5InformationNodeInstanceServer::isInformationServer() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void Qt5InformationNodeInstanceServer::handleRepeaterAddObject()
|
||||
{
|
||||
m_addObjectRepeaters.insert(sender());
|
||||
m_repeaterAddObjectTimer.start();
|
||||
}
|
||||
|
||||
// update 3D view size when it changes in creator side
|
||||
void Qt5InformationNodeInstanceServer::update3DViewState(const Update3dViewStateCommand &command)
|
||||
{
|
||||
|
||||
@@ -82,6 +82,7 @@ public:
|
||||
void handleInstanceHidden(const ServerNodeInstance &instance, bool enable, bool checkAncestors) override;
|
||||
|
||||
bool isInformationServer() const override;
|
||||
void handleRepeaterAddObject();
|
||||
|
||||
private slots:
|
||||
void handleSelectionChanged(const QVariant &objs);
|
||||
@@ -108,6 +109,7 @@ protected:
|
||||
private:
|
||||
void handleObjectPropertyChangeTimeout();
|
||||
void handleSelectionChangeTimeout();
|
||||
void handleRepeaterAddObjectTimeout();
|
||||
void createEditView3D();
|
||||
void create3DPreviewView();
|
||||
void setup3DEditView(const QList<ServerNodeInstance> &instanceList,
|
||||
@@ -174,6 +176,7 @@ private:
|
||||
QTimer m_render3DEditViewTimer;
|
||||
QTimer m_renderModelNodeImageViewTimer;
|
||||
QTimer m_inputEventTimer;
|
||||
QTimer m_repeaterAddObjectTimer;
|
||||
#ifdef QUICK3D_PARTICLES_MODULE
|
||||
bool m_particleAnimationPlaying = true;
|
||||
AnimationDriver *m_particleAnimationDriver = nullptr;
|
||||
@@ -186,6 +189,7 @@ private:
|
||||
QList<InputEventCommand> m_pendingInputEventCommands;
|
||||
QObject *m_3dHelper = nullptr;
|
||||
int m_need3DEditViewRender = 0;
|
||||
QSet<QObject *> m_addObjectRepeaters;
|
||||
|
||||
struct ModelNode3DImageViewAsyncData {
|
||||
QTimer timer;
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
#include "quick3dnodeinstance.h"
|
||||
#include "qt5nodeinstanceserver.h"
|
||||
#include "qt5informationnodeinstanceserver.h"
|
||||
|
||||
#include <qmlprivategate.h>
|
||||
|
||||
@@ -39,6 +40,7 @@
|
||||
#include <private/qquick3dnode_p.h>
|
||||
#include <private/qquick3dmodel_p.h>
|
||||
#include <private/qquick3dnode_p_p.h>
|
||||
#include <private/qquick3drepeater_p.h>
|
||||
#endif
|
||||
|
||||
namespace QmlDesigner {
|
||||
@@ -56,6 +58,14 @@ Quick3DNodeInstance::~Quick3DNodeInstance()
|
||||
void Quick3DNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance,
|
||||
InstanceContainer::NodeFlags flags)
|
||||
{
|
||||
#ifdef QUICK3D_MODULE
|
||||
if (auto repObj = qobject_cast<QQuick3DRepeater *>(object())) {
|
||||
if (auto infoServer = qobject_cast<Qt5InformationNodeInstanceServer *>(nodeInstanceServer())) {
|
||||
QObject::connect(repObj, &QQuick3DRepeater::objectAdded,
|
||||
infoServer, &Qt5InformationNodeInstanceServer::handleRepeaterAddObject);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ObjectNodeInstance::initialize(objectNodeInstance, flags);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user