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
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;
558 if (
i < resourcesCount)
560 const int j =
i - resourcesCount;
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.");
963 if (oldSubFocusItem) {
965 while (sfi && sfi != scope) {
967 sfi = sfi->parentItem();
974 while (sfi && sfi != scope) {
976 sfi = sfi->parentItem();
987 case QQuick3DObject::ItemRotationHasChanged:
989 qWarning(
"ItemRoationHasChange is unhandled!!!!");
991 case QQuick3DObject::ItemChildAddedChange: {
992 q->itemChange(change,
data);
997 change.listener->itemChildAdded(
q,
data.item);
1003 case QQuick3DObject::ItemChildRemovedChange: {
1004 q->itemChange(change,
data);
1009 change.listener->itemChildRemoved(
q,
data.item);
1015 case QQuick3DObject::ItemSceneChange:
1016 q->itemChange(change,
data);
1018 case QQuick3DObject::ItemVisibleHasChanged: {
1019 q->itemChange(change,
data);
1024 change.listener->itemVisibilityChanged(
q);
1030 case QQuick3DObject::ItemEnabledHasChanged: {
1031 q->itemChange(change,
data);
1036 change.listener->itemEnabledChanged(
q);
1042 case QQuick3DObject::ItemParentHasChanged: {
1043 q->itemChange(change,
data);
1048 change.listener->itemParentChanged(
q,
data.item);
1054 case QQuick3DObject::ItemOpacityHasChanged: {
1055 q->itemChange(change,
data);
1060 change.listener->itemOpacityChanged(
q);
1066 case QQuick3DObject::ItemActiveFocusHasChanged:
1067 q->itemChange(change,
data);
1069 case QQuick3DObject::ItemAntialiasingHasChanged:
1071 case QQuick3DObject::ItemDevicePixelRatioHasChanged:
1072 q->itemChange(change,
data);
1112#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 setParent(QObject *parent)
Makes the object a child of parent.
void deleteLater()
\threadsafe
bool isNull() const
Returns true if the referenced object has been destroyed or if there is no referenced object; otherwi...
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
void addChildItem(QQuickItem *item)
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)
QQuick3DObject * subFocusItem
static qsizetype resources_count(QQmlListProperty< QObject > *)
void _q_cleanupContentItem2D()
void removeFromDirtyList()
@ ChildrenStackingChanged
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()
quint64 _q_createJSWrapper(QV4::ExecutionEngine *engine)
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.
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.
\qmltype Particle \inqmlmodule QtQuick.Particles
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 Q_REQUIRED_RESULT constexpr bool isNodeType(Type type) Q_DECL_NOTHROW
static constexpr bool isExtension(Type type) 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)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent