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
4#include "qquickitemviewfxitem_p_p.h"
5#include "qquickitem_p.h"
6#include "qquickitemview_p_p.h"
7
8QT_BEGIN_NAMESPACE
9
10QQuickItemViewFxItem::QQuickItemViewFxItem(QQuickItem *item, bool ownItem, QQuickItemChangeListener* changeListener)
11 : item(item)
12 , changeListener(changeListener)
13#if QT_CONFIG(quick_viewtransitions)
14 , transitionableItem(nullptr)
15#endif
16 , ownItem(ownItem)
17 , releaseAfterTransition(false)
18 , trackGeom(false)
19{
20}
21
22QQuickItemViewFxItem::~QQuickItemViewFxItem()
23{
24#if QT_CONFIG(quick_viewtransitions)
25 delete transitionableItem;
26 transitionableItem = nullptr;
27#endif
28
29 if (ownItem && item) {
30 trackGeometry(track: false);
31 item->setParentItem(0);
32 item->deleteLater();
33 }
34}
35
36qreal QQuickItemViewFxItem::itemX() const
37{
38 return
39#if QT_CONFIG(quick_viewtransitions)
40 transitionableItem ? transitionableItem->itemX() :
41#endif
42 (item ? item->x() : 0);
43}
44
45qreal QQuickItemViewFxItem::itemY() const
46{
47 return
48#if QT_CONFIG(quick_viewtransitions)
49 transitionableItem ? transitionableItem->itemY() :
50#endif
51 (item ? item->y() : 0);
52}
53
54void QQuickItemViewFxItem::moveTo(const QPointF &pos, bool immediate)
55{
56#if QT_CONFIG(quick_viewtransitions)
57 if (transitionableItem)
58 transitionableItem->moveTo(pos, immediate);
59 else
60#else
61 Q_UNUSED(immediate)
62#endif
63 if (item)
64 item->setPosition(pos);
65}
66
67void QQuickItemViewFxItem::setVisible(bool visible)
68{
69 if (!visible
70#if QT_CONFIG(quick_viewtransitions)
71 && transitionableItem && transitionableItem->transitionScheduledOrRunning()
72#endif
73 )
74 return;
75 if (item) {
76 QQuickItemPrivate::get(item)->setCulled(!visible);
77 QQuickItemPrivate::get(item)->isAccessible = visible;
78 }
79}
80
81void QQuickItemViewFxItem::trackGeometry(bool track)
82{
83 if (track) {
84 if (!trackGeom) {
85 if (item) {
86 QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
87 itemPrivate->addItemChangeListener(listener: changeListener, types: QQuickItemPrivate::Geometry);
88 }
89 trackGeom = true;
90 }
91 } else {
92 if (trackGeom) {
93 if (item) {
94 QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
95 itemPrivate->removeItemChangeListener(changeListener, types: QQuickItemPrivate::Geometry);
96 }
97 trackGeom = false;
98 }
99 }
100}
101
102QRectF QQuickItemViewFxItem::geometry() const
103{
104 return QRectF(item->position(), item->size());
105}
106
107void QQuickItemViewFxItem::setGeometry(const QRectF &geometry)
108{
109 item->setPosition(geometry.topLeft());
110 item->setSize(geometry.size());
111}
112
113#if QT_CONFIG(quick_viewtransitions)
114QQuickItemViewTransitioner::TransitionType QQuickItemViewFxItem::scheduledTransitionType() const
115{
116 return transitionableItem ? transitionableItem->nextTransitionType : QQuickItemViewTransitioner::NoTransition;
117}
118
119bool QQuickItemViewFxItem::transitionScheduledOrRunning() const
120{
121 return transitionableItem ? transitionableItem->transitionScheduledOrRunning() : false;
122}
123
124bool QQuickItemViewFxItem::transitionRunning() const
125{
126 return transitionableItem ? transitionableItem->transitionRunning() : false;
127}
128
129bool QQuickItemViewFxItem::isPendingRemoval() const
130{
131 return transitionableItem ? transitionableItem->isPendingRemoval() : false;
132}
133
134void QQuickItemViewFxItem::transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget)
135{
136 if (!transitioner)
137 return;
138 if (!transitionableItem)
139 transitionableItem = new QQuickItemViewTransitionableItem(item);
140 transitioner->transitionNextReposition(item: transitionableItem, type, isTarget: asTarget);
141}
142
143bool QQuickItemViewFxItem::prepareTransition(QQuickItemViewTransitioner *transitioner, const QRectF &viewBounds)
144{
145 return transitionableItem ? transitionableItem->prepareTransition(transitioner, index, viewBounds) : false;
146}
147
148void QQuickItemViewFxItem::startTransition(QQuickItemViewTransitioner *transitioner)
149{
150 if (transitionableItem)
151 transitionableItem->startTransition(transitioner, index);
152}
153#endif
154
155QT_END_NAMESPACE
156
157

Provided by KDAB

Privacy Policy
Start learning QML with our Intro Training
Find out more

source code of qtdeclarative/src/quick/items/qquickitemviewfxitem.cpp