10#include <QtQuick3DRuntimeRender/private/qssgrendergraphobject_p.h>
12#include <QtQml/private/qqmlglobal_p.h>
13#include <QtQuick/private/qquickstategroup_p.h>
14#include <QtQuick/private/qquickstate_p.h>
15#include <QtQuick/private/qquickitem_p.h>
17#include <private/qv4object_p.h>
18#include <private/qv4qobjectwrapper_p.h>
83 while (!
d->childItems.isEmpty())
84 d->childItems.constFirst()->setParentItem(
nullptr);
86 delete d->_stateGroup;
87 d->_stateGroup =
nullptr;
88 delete d->contentItem2d;
89 d->contentItem2d =
nullptr;
94 if (
d->sceneRefCount > 1)
97 if (!
d->parentItem &&
d->sceneManager)
137 if (parentItem ==
d->parentItem)
142 while (itemAncestor !=
nullptr) {
144 qWarning() <<
"QSSGObject::setParentItem: Parent" << parentItem <<
"is already part of the subtree of" <<
this;
147 itemAncestor = itemAncestor->parentItem();
151 d->removeFromDirtyList();
159 }
else if (
d->sceneManager) {
160 d->sceneManager->parentlessItems.remove(
this);
164 if (
d->sceneManager == parentSceneManager) {
166 d->parentItem = parentItem;
170 d->parentItem = parentItem;
171 if (parentSceneManager)
179 else if (
d->sceneManager)
180 d->sceneManager->parentlessItems.insert(
this);
182 d->itemChange(ItemParentHasChanged,
d->parentItem);
187QString QQuick3DObject::state()
const
199QList<QQuick3DObject *> QQuick3DObject::childItems()
const
202 return d->childItems;
208 return d->parentItem;
235 d->componentComplete =
false;
237 d->_stateGroup->classBegin();
243 d->componentComplete =
true;
245 d->_stateGroup->componentComplete();
247 if (
d->sceneManager &&
d->dirtyAttributes) {
256 return d->componentComplete;
330 return QQmlListProperty<QObject>(q_func(),
344 return QQmlListProperty<QObject>(q_func(),
377 return QQmlListProperty<QQuick3DObject>(q_func(),
524 if (!privateItem->contentItem2d) {
526 privateItem->contentItem2d->setParent(that);
527 privateItem->contentItem2d->setParentItem(that);
529 privateItem->contentItem2d->addChildItem(quickItem);
544 QQmlListProperty<QObject> resourcesProperty = privateItem->resources();
545 QQmlListProperty<QQuick3DObject> childrenProperty = privateItem->children();
554 QQmlListProperty<QObject> resourcesProperty = privateItem->resources();
555 QQmlListProperty<QQuick3DObject> childrenProperty = privateItem->children();
558 if (
i < resourcesCount)
560 const int j =
i - resourcesCount;
570 QQmlListProperty<QObject> resourcesProperty = privateItem->resources();
571 QQmlListProperty<QQuick3DObject> childrenProperty = privateItem->children();
580 return quickItemPrivate->extra.isAllocated() ? quickItemPrivate->extra->resourcesList.value(
index) : 0;
587 if (!quickItemPrivate->extra.value().resourcesList.contains(
object)) {
588 quickItemPrivate->extra.value().resourcesList.append(
object);
599 return quickItemPrivate->extra.isAllocated() ? quickItemPrivate->extra->resourcesList.size() : 0;
606 if (quickItemPrivate->extra.isAllocated()) {
607 for (
QObject *
object : std::as_const(quickItemPrivate->extra->resourcesList)) {
613 quickItemPrivate->extra->resourcesList.clear();
623 if (
o->parentItem() == that)
624 o->setParentItem(
nullptr);
626 o->setParentItem(that);
632 return p->childItems.size();
641 return p->childItems.at(
index);
648 while (!
p->childItems.isEmpty())
649 p->childItems.at(0)->setParentItem(
nullptr);
654 if (
extra.isAllocated() &&
extra->resourcesList.contains(
object))
655 extra->resourcesList.removeAll(
object);
706#define DIRTY_TO_STRING(value) \
707 if (dirtyAttributes & value) { \
709 rv.append(QLatin1Char('|')); \
710 rv.append(QLatin1String(#value)); \
813 if ((cull && ++
extra.value().hideRefCount == 1) || (!cull && --
extra.value().hideRefCount == 0))
829 emit q->childrenChanged();
845 emit q->childrenChanged();
855 change.listener->itemSiblingOrderChanged(
q);
882 qWarning(
"QSSGObject: Cannot use same item on different windows at the same time.");
964 if (oldSubFocusItem) {
966 while (sfi && sfi != scope) {
968 sfi = sfi->parentItem();
973 scopePrivate->subFocusItem =
q;
975 while (sfi && sfi != scope) {
977 sfi = sfi->parentItem();
980 scopePrivate->subFocusItem =
nullptr;
988 case QQuick3DObject::ItemRotationHasChanged:
990 qWarning(
"ItemRoationHasChange is unhandled!!!!");
992 case QQuick3DObject::ItemChildAddedChange: {
993 q->itemChange(change,
data);
998 change.listener->itemChildAdded(
q,
data.item);
1004 case QQuick3DObject::ItemChildRemovedChange: {
1005 q->itemChange(change,
data);
1010 change.listener->itemChildRemoved(
q,
data.item);
1016 case QQuick3DObject::ItemSceneChange:
1017 q->itemChange(change,
data);
1019 case QQuick3DObject::ItemVisibleHasChanged: {
1020 q->itemChange(change,
data);
1025 change.listener->itemVisibilityChanged(
q);
1031 case QQuick3DObject::ItemEnabledHasChanged: {
1032 q->itemChange(change,
data);
1037 change.listener->itemEnabledChanged(
q);
1043 case QQuick3DObject::ItemParentHasChanged: {
1044 q->itemChange(change,
data);
1049 change.listener->itemParentChanged(
q,
data.item);
1055 case QQuick3DObject::ItemOpacityHasChanged: {
1056 q->itemChange(change,
data);
1061 change.listener->itemOpacityChanged(
q);
1067 case QQuick3DObject::ItemActiveFocusHasChanged:
1068 q->itemChange(change,
data);
1070 case QQuick3DObject::ItemAntialiasingHasChanged:
1072 case QQuick3DObject::ItemDevicePixelRatioHasChanged:
1073 q->itemChange(change,
data);
1113#include "moc_qquick3dobject.cpp"
void setParentItem(QGraphicsItem *parent)
Sets this item's parent item to newParent.
qsizetype size() const noexcept
bool removeOne(const AT &t)
const_reference at(qsizetype i) const noexcept
qsizetype removeAll(const AT &t)
void append(parameter_type t)
void deleteLater()
\threadsafe
T * data() const noexcept
bool isNull() const noexcept
static void children_append(QQmlListProperty< QQuick3DObject > *, QQuick3DObject *)
QQuick3DObject * parentItem
void addItemChangeListener(QQuick3DObjectChangeListener *listener, ChangeTypes types)
QList< QQuick3DObject * > childItems
void updateOrAddItemChangeListener(QQuick3DObjectChangeListener *listener, ChangeTypes types)
void siblingOrderChanged()
QQmlListProperty< QQuick3DObject > children()
QQuickStateGroup * _stateGroup
QQmlListProperty< QObject > resources()
QPointer< QQuick3DSceneManager > sceneManager
QQuick3DObject ** prevDirtyItem
void removeItemChangeListener(QQuick3DObjectChangeListener *, ChangeTypes types)
static void resources_append(QQmlListProperty< QObject > *, QObject *)
void updateSubFocusItem(QQuick3DObject *scope, bool focus)
static qsizetype resources_count(QQmlListProperty< QObject > *)
void _q_cleanupContentItem2D()
void removeFromDirtyList()
@ ChildrenStackingChanged
quint64 _q_createJSWrapper(QQmlV4ExecutionEnginePtr engine)
static void data_clear(QQmlListProperty< QObject > *)
static void data_append(QQmlListProperty< QObject > *, QObject *)
static QObject * data_at(QQmlListProperty< QObject > *, qsizetype)
QQuick3DObject * nextDirtyItem
static QQuick3DObject * children_at(QQmlListProperty< QQuick3DObject > *, qsizetype)
static QObject * resources_at(QQmlListProperty< QObject > *, qsizetype)
~QQuick3DObjectPrivate() override
void refSceneManager(QQuick3DSceneManager &)
static void resources_clear(QQmlListProperty< QObject > *)
static qsizetype data_count(QQmlListProperty< QObject > *)
QQmlListProperty< QQuickTransition > transitions()
void _q_resourceObjectDeleted(QObject *)
void removeChild(QQuick3DObject *)
void addChild(QQuick3DObject *)
void itemChange(QQuick3DObject::ItemChange, const QQuick3DObject::ItemChangeData &)
QQuick3DObjectPrivate(Type t)
QVector< QQuick3DObjectPrivate::ChangeListener > changeListeners
QQuickStateGroup * _states()
QLazilyAllocated< ExtraData > extra
static QQuick3DObjectPrivate * get(QQuick3DObject *item)
QQmlListProperty< QQuickState > states()
static void children_clear(QQmlListProperty< QQuick3DObject > *)
void init(QQuick3DObject *parent)
QSSGRenderGraphObject * spatialNode
void setState(const QString &)
static qsizetype children_count(QQmlListProperty< QQuick3DObject > *)
QQuick3DItem2D * contentItem2d
QString dirtyToString() const
QQmlListProperty< QObject > data()
\qmltype Object3D \inqmlmodule QtQuick3D \instantiates QQuick3DObject \inherits QtObject
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
QQuick3DObject * parent
\qmlproperty Object3D QtQuick3D::Object3D::parent This property holds the parent of the Object3D in a...
void setParentItem(QQuick3DObject *parentItem)
virtual QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node)
virtual void itemChange(ItemChange, const ItemChangeData &)
~QQuick3DObject() override
bool isComponentComplete() const
virtual void markAllDirty()
void classBegin() override
Invoked after class creation, but before any properties have been set.
static size_t nodeListIndex(QSSGRenderGraphObject::Type type)
QList< QQuick3DObject * > dirtyBoundingBoxList
QQuick3DObject * dirtyNodes[size_t(NodePriority::Count)]
QQuick3DObject * dirtyExtensions[size_t(ExtensionPriority::Count)]
void dirtyItem(QQuick3DObject *item)
QSet< QQuick3DObject * > parentlessItems
QQuick3DObject * dirtyResources[size_t(ResourcePriority::Count)]
static size_t resourceListIndex(QSSGRenderGraphObject::Type type)
static constexpr size_t extensionListIndex(QSSGRenderGraphObject::Type type)
void cleanup(QSSGRenderGraphObject *item)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
QQmlListProperty< QQuickTransition > transitionsProperty()
\qmlproperty list<Transition> QtQuick::StateGroup::transitions This property holds a list of transiti...
void setState(const QString &)
QQmlListProperty< QQuickState > statesProperty()
\qmlproperty list<State> QtQuick::StateGroup::states This property holds a list of states defined by ...
void classBegin() override
Invoked after class creation, but before any properties have been set.
static constexpr bool isNodeType(Type type) noexcept
static constexpr bool isExtension(Type type) noexcept
bool remove(const T &value)
iterator insert(const T &value)
\macro QT_RESTRICTED_CAST_FROM_ASCII
[Window class with invokable method]
Combined button and popup list for selecting options.
GLsizei GLenum GLenum * types
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLdouble GLdouble GLdouble GLdouble q
#define qmlobject_disconnect(Sender, SenderType, Signal, Receiver, ReceiverType, Method)
Disconnect Signal of Sender from Method of Receiver.
#define qmlobject_connect(Sender, SenderType, Signal, Receiver, ReceiverType, Method)
Connect Signal of Sender to Method of Receiver.
#define Q_QUICK3D_PROFILE_REGISTER_D(obj)
#define Q_QUICK3D_PROFILE_ASSIGN_ID_SG(obj, bgnode)
#define DIRTY_TO_STRING(value)
QQuickItem * qobject_cast< QQuickItem * >(QObject *o)
unsigned long long quint64
#define DEFINE_OBJECT_VTABLE(classname)
#define V4_OBJECT2(DataClass, superClass)
bool contains(const AT &t) const noexcept
static void markObjects(Heap::Base *that, MarkStack *markStack)
static void markObjects(QV4::Heap::Base *that, QV4::MarkStack *markStack)
static void markWrapper(QObject *object, MarkStack *markStack)