Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickitemviewfxitem.cpp
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
6#include "qquickitem_p.h"
8
10
11QQuickItemViewFxItem::QQuickItemViewFxItem(QQuickItem *item, bool ownItem, QQuickItemChangeListener* changeListener)
12 : item(item)
13 , changeListener(changeListener)
14#if QT_CONFIG(quick_viewtransitions)
15 , transitionableItem(nullptr)
16#endif
17 , ownItem(ownItem)
18 , releaseAfterTransition(false)
19 , trackGeom(false)
20{
21}
22
23QQuickItemViewFxItem::~QQuickItemViewFxItem()
24{
25#if QT_CONFIG(quick_viewtransitions)
26 delete transitionableItem;
27 transitionableItem = nullptr;
28#endif
29
30 if (ownItem && item) {
31 trackGeometry(false);
32 item->setParentItem(0);
33 item->deleteLater();
34 }
35}
36
37qreal QQuickItemViewFxItem::itemX() const
38{
39 return
40#if QT_CONFIG(quick_viewtransitions)
41 transitionableItem ? transitionableItem->itemX() :
42#endif
43 (item ? item->x() : 0);
44}
45
46qreal QQuickItemViewFxItem::itemY() const
47{
48 return
49#if QT_CONFIG(quick_viewtransitions)
50 transitionableItem ? transitionableItem->itemY() :
51#endif
52 (item ? item->y() : 0);
53}
54
55void QQuickItemViewFxItem::moveTo(const QPointF &pos, bool immediate)
56{
57#if QT_CONFIG(quick_viewtransitions)
58 if (transitionableItem)
59 transitionableItem->moveTo(pos, immediate);
60 else
61#else
62 Q_UNUSED(immediate)
63#endif
64 if (item)
65 item->setPosition(pos);
66}
67
68void QQuickItemViewFxItem::setVisible(bool visible)
69{
70 if (!visible
71#if QT_CONFIG(quick_viewtransitions)
72 && transitionableItem && transitionableItem->transitionScheduledOrRunning()
73#endif
74 )
75 return;
76 if (item) {
77 QQuickItemPrivate::get(item)->setCulled(!visible);
78 QQuickItemPrivate::get(item)->isAccessible = visible;
79 }
80}
81
82void QQuickItemViewFxItem::trackGeometry(bool track)
83{
84 if (track) {
85 if (!trackGeom) {
86 if (item) {
87 QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
88 itemPrivate->addItemChangeListener(changeListener, QQuickItemPrivate::Geometry);
89 }
90 trackGeom = true;
91 }
92 } else {
93 if (trackGeom) {
94 if (item) {
95 QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
96 itemPrivate->removeItemChangeListener(changeListener, QQuickItemPrivate::Geometry);
97 }
98 trackGeom = false;
99 }
100 }
101}
102
103QRectF QQuickItemViewFxItem::geometry() const
104{
105 return QRectF(item->position(), item->size());
106}
107
108void QQuickItemViewFxItem::setGeometry(const QRectF &geometry)
109{
110 item->setPosition(geometry.topLeft());
111 item->setSize(geometry.size());
112}
113
114#if QT_CONFIG(quick_viewtransitions)
115QQuickItemViewTransitioner::TransitionType QQuickItemViewFxItem::scheduledTransitionType() const
116{
117 return transitionableItem ? transitionableItem->nextTransitionType : QQuickItemViewTransitioner::NoTransition;
118}
119
120bool QQuickItemViewFxItem::transitionScheduledOrRunning() const
121{
122 return transitionableItem ? transitionableItem->transitionScheduledOrRunning() : false;
123}
124
125bool QQuickItemViewFxItem::transitionRunning() const
126{
127 return transitionableItem ? transitionableItem->transitionRunning() : false;
128}
129
130bool QQuickItemViewFxItem::isPendingRemoval() const
131{
132 return transitionableItem ? transitionableItem->isPendingRemoval() : false;
133}
134
135void QQuickItemViewFxItem::transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget)
136{
137 if (!transitioner)
138 return;
139 if (!transitionableItem)
140 transitionableItem = new QQuickItemViewTransitionableItem(item);
141 transitioner->transitionNextReposition(transitionableItem, type, asTarget);
142}
143
144bool QQuickItemViewFxItem::prepareTransition(QQuickItemViewTransitioner *transitioner, const QRectF &viewBounds)
145{
146 return transitionableItem ? transitionableItem->prepareTransition(transitioner, index, viewBounds) : false;
147}
148
149void QQuickItemViewFxItem::startTransition(QQuickItemViewTransitioner *transitioner)
150{
151 if (transitionableItem)
152 transitionableItem->startTransition(transitioner, index);
153}
154#endif
155
156QT_END_NAMESPACE