5#ifndef QQUICKITEMCHANGELISTENER_P_H
6#define QQUICKITEMCHANGELISTENER_P_H
19#include <QtCore/qxptype_traits.h>
20#include <QtQml/private/qqmldata_p.h>
21#include <QtQuick/qquickitem.h>
22#include <QtQuick/private/qtquickglobal_p.h>
71 void set(
int bits,
bool enabled)
86#define QT_QUICK_NEW_GEOMETRY_CHANGED_HANDLING
91 virtual ~QQuickItemChangeListener();
93 virtual void itemGeometryChanged(QQuickItem *, QQuickGeometryChange,
const QRectF & ) {}
94 virtual void itemSiblingOrderChanged(QQuickItem *) {}
95 virtual void itemVisibilityChanged(QQuickItem *) {}
96 virtual void itemEnabledChanged(QQuickItem *) {}
97 virtual void itemOpacityChanged(QQuickItem *) {}
98 virtual void itemDestroyed(QQuickItem *) {}
99 virtual void itemChildAdded(QQuickItem *, QQuickItem * ) {}
100 virtual void itemChildRemoved(QQuickItem *, QQuickItem * ) {}
101 virtual void itemParentChanged(QQuickItem *, QQuickItem * ) {}
102 virtual void itemRotationChanged(QQuickItem *) {}
103 virtual void itemImplicitWidthChanged(QQuickItem *) {}
104 virtual void itemImplicitHeightChanged(QQuickItem *) {}
105 virtual void itemFocusChanged(QQuickItem *, Qt::FocusReason ) {}
106 virtual void itemScaleChanged(QQuickItem *) {}
107 virtual void itemTransformChanged(QQuickItem *, QQuickItem * ) {}
109 virtual QQuickAnchorsPrivate *anchorPrivate() {
return nullptr; }
110 virtual bool baseDeleted(
const QObject *caller)
const
112 if (
auto ptr =
dynamic_cast<
const QObjectPrivate *>(
this))
113 return ptr->q_ptr != caller && QQmlData::wasDeleted(ptr);
116 virtual QString debugName()
const {
117 return QStringLiteral(
"QQuickItemChangeListener(0x%1)").arg(quintptr(
this), 0, 16);
119 virtual void addSourceItem(QQuickItem *) {}
120 virtual void removeSourceItem(QQuickItem *) {}
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145template<
typename Self>
151#ifdef QT_BUILD_INTERNAL
152 for (
const auto &sourceItem : std::as_const(m_sourceItems)) {
154 qCritical() <<
"Change Listener is still registered with item" << sourceItem;
159 template <
typename T>
161 template <
typename T>
167 const Self *self =
static_cast<
const Self *>(
this);
168 if constexpr (qxp::is_detected_v<InDestructorTest, Self>) {
170 if constexpr (std::is_convertible_v<Self *, QObjectPrivate *>)
171 same = self->q_ptr == caller;
172 return !same && self->inDestructor;
173 }
else if constexpr (qxp::is_detected_v<WasDeletedTest, Self>) {
175 if constexpr (std::is_convertible_v<Self *, QObjectPrivate *>)
176 same = self->q_ptr == caller;
177 return !same && self->wasDeleted;
178 }
else if constexpr (std::is_convertible_v<Self *, QQuickItem *>) {
179 return self != caller && QQmlData::wasDeleted(self);
180 }
else if constexpr (std::is_convertible_v<Self *, QObject *>) {
181 return self != caller && QQmlData::wasDeleted(self);
183 static_assert(QtPrivate::type_dependent_false<Self>(),
184 "Don't know where destruction state is stored");
192 dbg.nospace().noquote();
193 const Self *self =
static_cast<
const Self *>(
this);
194 if constexpr (std::is_convertible_v<Self *, QObject *>) {
196 }
else if constexpr (std::is_convertible_v<Self *, QObjectPrivate *>) {
197 dbg << self->q_ptr <<
"::d_ptr";
199 dbg << QMetaType::fromType<Self>().name() <<
'('
200 <<
reinterpret_cast<
const void *>(self) <<
')';
205#ifdef QT_BUILD_INTERNAL
qint8 updatingVerticalAnchor
bool checkHAnchorValid(QQuickAnchorLine anchor) const
QQuickItem * hCenterAnchorItem
bool isItemComplete() const
void remDepend(QQuickItem *)
QQuickItem * rightAnchorItem
QQuickGeometryChange calculateDependency(QQuickItem *) const
void updateHorizontalAnchors()
void setItemHeight(qreal)
QQuickItem * topAnchorItem
qint8 updatingHorizontalAnchor
QQuickItem * bottomAnchorItem
bool checkVAnchorValid(QQuickAnchorLine anchor) const
void addDepend(QQuickItem *)
QQuickItem * vCenterAnchorItem
void setItemSize(const QSizeF &)
static QQuickAnchorsPrivate * get(QQuickAnchors *o)
void itemGeometryChanged(QQuickItem *, QQuickGeometryChange, const QRectF &) override
QQuickItem * baselineAnchorItem
QQuickAnchorsPrivate * anchorPrivate() override
void updateVerticalAnchors()
bool calcStretch(QQuickItem *edge1Item, QQuickAnchors::Anchor edge1Line, QQuickItem *edge2Item, QQuickAnchors::Anchor edge2Line, qreal offset1, qreal offset2, QQuickAnchors::Anchor line, qreal &stretch) const
uint bottomMarginExplicit
QQuickItem * leftAnchorItem
void setItemPos(const QPointF &)
void setXChange(bool enabled)
bool horizontalChange() const
bool matches(QQuickGeometryChange other) const
void setSizeChange(bool enabled)
bool heightChange() const
bool positionChange() const
void set(int bits, bool enabled)
void setAllChanged(bool enabled)
QQuickGeometryChange(int change=Nothing)
void setVerticalChange(bool enabled)
void setWidthChange(bool enabled)
void setHeightChange(bool enabled)
void setYChange(bool enabled)
bool verticalChange() const
void setHorizontalChange(bool enabled)
QString debugName() const override
~QSafeQuickItemChangeListener() override
decltype(T::wasDeleted) WasDeletedTest
bool baseDeleted(const QObject *caller) const override
decltype(T::inDestructor) InDestructorTest
static qreal hcenter(const QQuickItem *item)
static qreal vcenter(const QQuickItem *item)
static QQuickAnchors::Anchor reverseAnchorLine(QQuickAnchors::Anchor anchorLine)
static qreal adjustedPosition(QQuickItem *item, QQuickAnchors::Anchor anchorLine)
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
bool operator==(const QQuickAnchorLine &a, const QQuickAnchorLine &b)