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:
Eike Ziller
2021-12-09 12:02:47 +01:00
328 changed files with 2093 additions and 709 deletions
@@ -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;
@@ -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);
}