aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTasuku Suzuki <tasuku.suzuki@signal-slot.co.jp>2023-03-05 17:11:08 +0900
committerTasuku Suzuki <tasuku.suzuki@signal-slot.co.jp>2023-03-07 18:24:50 +0900
commit562a1a46a0917be3f9bb8c24b81aa7ad5a46f010 (patch)
tree41450e64571c7424e99d29b9934857221d19cb0d
parente09d1a5694fa48332831521ec3851e5bffcf8ffe (diff)
Fix build with -no-feature-quick-viewtransitions
Pick-to: 6.5 Change-Id: I609a843bddbd0776452d289b144dab803503a483 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r--src/quick/items/qquickgridview.cpp31
-rw-r--r--src/quick/items/qquickitemview.cpp55
-rw-r--r--src/quick/items/qquickitemview_p.h6
-rw-r--r--src/quick/items/qquickitemview_p_p.h22
-rw-r--r--src/quick/items/qquickitemviewfxitem.cpp31
-rw-r--r--src/quick/items/qquickitemviewfxitem_p_p.h6
-rw-r--r--src/quick/items/qquicklistview.cpp32
-rw-r--r--src/quick/items/qquickpositioners.cpp44
-rw-r--r--src/quick/items/qquickpositioners_p.h10
-rw-r--r--src/quick/items/qquickpositioners_p_p.h7
-rw-r--r--src/quicktemplates/CMakeLists.txt8
-rw-r--r--src/quicktemplates/qquickstackelement.cpp28
-rw-r--r--src/quicktemplates/qquickstackelement_p_p.h13
-rw-r--r--src/quicktemplates/qquickstacktransition_p_p.h4
-rw-r--r--src/quicktemplates/qquickstackview.cpp25
-rw-r--r--src/quicktemplates/qquickstackview_p.cpp4
-rw-r--r--src/quicktemplates/qquickstackview_p.h6
-rw-r--r--src/quicktemplates/qquickstackview_p_p.h18
18 files changed, 330 insertions, 20 deletions
diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp
index 7f45d45708..6b75c2ab05 100644
--- a/src/quick/items/qquickgridview.cpp
+++ b/src/quick/items/qquickgridview.cpp
@@ -162,7 +162,9 @@ public:
void setPosition(qreal pos) override;
void layoutVisibleItems(int fromModelIndex = 0) override;
bool applyInsertionChange(const QQmlChangeSet::Change &insert, ChangeResult *changeResult, QList<FxViewItem *> *addedItems, QList<MovedItem> *movingIntoView) override;
+#if QT_CONFIG(quick_viewtransitions)
void translateAndTransitionItemsAfter(int afterModelIndex, const ChangeResult &insertionResult, const ChangeResult &removalResult) override;
+#endif
bool needsRefillForAddedOrRemovedIndex(int index) const override;
qreal headerSize() const override;
@@ -503,8 +505,10 @@ bool QQuickGridViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
qCDebug(lcItemViewDelegateLifecycle) << "refill: append item" << modelIndex << colPos << rowPos;
if (!(item = static_cast<FxGridItemSG*>(createItem(modelIndex, incubationMode))))
break;
+#if QT_CONFIG(quick_viewtransitions)
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(colPos, rowPos, true);
+#endif
QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
visibleItems.append(item);
if (++colNum >= columns) {
@@ -538,8 +542,10 @@ bool QQuickGridViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
if (!(item = static_cast<FxGridItemSG*>(createItem(visibleIndex-1, incubationMode))))
break;
--visibleIndex;
+#if QT_CONFIG(quick_viewtransitions)
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(colPos, rowPos, true);
+#endif
QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
visibleItems.prepend(item);
if (--colNum < 0) {
@@ -555,11 +561,14 @@ bool QQuickGridViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
void QQuickGridViewPrivate::removeItem(FxViewItem *item)
{
+#if QT_CONFIG(quick_viewtransitions)
if (item->transitionScheduledOrRunning()) {
qCDebug(lcItemViewDelegateLifecycle) << "\tnot releasing animating item:" << item->index << item->item->objectName();
item->releaseAfterTransition = true;
releasePendingTransition.append(item);
- } else {
+ } else
+#endif
+ {
releaseItem(item, QQmlDelegateModel::NotReusable);
}
}
@@ -883,7 +892,11 @@ void QQuickGridViewPrivate::initializeCurrentItem()
FxViewItem *actualItem = visibleItem(currentIndex);
// don't reposition the item if it's about to be transitioned to another position
- if ((!actualItem || !actualItem->transitionScheduledOrRunning()))
+ if ((!actualItem
+#if QT_CONFIG(quick_viewtransitions)
+ || !actualItem->transitionScheduledOrRunning()
+#endif
+ ))
gridItem->setPosition(colPosAt(currentIndex), rowPosAt(currentIndex));
}
}
@@ -2404,6 +2417,7 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
}
}
+#if QT_CONFIG(quick_viewtransitions)
// Update the indexes of the following visible items.
for (FxViewItem *item : std::as_const(visibleItems)) {
if (item->index != -1 && item->index >= modelIndex) {
@@ -2414,6 +2428,7 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, false);
}
}
+#endif
int prevVisibleCount = visibleItems.size();
if (insertResult->visiblePos.isValid() && rowPos < insertResult->visiblePos) {
@@ -2443,9 +2458,11 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
insertResult->changedFirstItem = true;
if (!change.isMove()) {
addedItems->append(item);
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner)
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, true);
else
+#endif
item->moveTo(QPointF(colPos, rowPos), true);
}
insertResult->sizeChangesBeforeVisiblePos += rowSize();
@@ -2497,13 +2514,19 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
if (change.isMove()) {
// we know this is a move target, since move displaced items that are
// shuffled into view due to a move would be added in refill()
- if (newItem && transitioner && transitioner->canTransition(QQuickItemViewTransitioner::MoveTransition, true))
+ if (newItem
+#if QT_CONFIG(quick_viewtransitions)
+ && transitioner && transitioner->canTransition(QQuickItemViewTransitioner::MoveTransition, true)
+#endif
+ )
movingIntoView->append(MovedItem(item, change.moveKey(item->index)));
} else {
addedItems->append(item);
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner)
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, true);
else
+#endif
item->moveTo(QPointF(colPos, rowPos), true);
}
insertResult->sizeChangesAfterVisiblePos += rowSize();
@@ -2523,6 +2546,7 @@ bool QQuickGridViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
return visibleItems.size() > prevVisibleCount;
}
+#if QT_CONFIG(quick_viewtransitions)
void QQuickGridViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex, const ChangeResult &insertionResult, const ChangeResult &removalResult)
{
if (!transitioner)
@@ -2562,6 +2586,7 @@ void QQuickGridViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex
}
}
}
+#endif
bool QQuickGridViewPrivate::needsRefillForAddedOrRemovedIndex(int modelIndex) const
{
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index a149f8d098..ba6c1534d3 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -211,10 +211,12 @@ void QQuickItemView::setModel(const QVariant &m)
setCurrentIndex(d->model->count() > 0 ? 0 : -1);
d->updateViewport();
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner && d->transitioner->populateTransition) {
d->transitioner->setPopulateTransitionEnabled(true);
d->forceLayoutPolish();
}
+#endif
}
connect(d->model, SIGNAL(modelUpdated(QQmlChangeSet,bool)),
@@ -684,6 +686,7 @@ void QQuickItemView::setReuseItems(bool reuse)
emit reuseItemsChanged();
}
+#if QT_CONFIG(quick_viewtransitions)
QQuickTransition *QQuickItemView::populateTransition() const
{
Q_D(const QQuickItemView);
@@ -811,6 +814,7 @@ void QQuickItemView::setDisplacedTransition(QQuickTransition *transition)
emit displacedTransitionChanged();
}
}
+#endif
void QQuickItemViewPrivate::positionViewAtIndex(int index, int mode)
{
@@ -1148,11 +1152,13 @@ void QQuickItemViewPrivate::itemGeometryChanged(QQuickItem *item, QQuickGeometry
// don't allow item movement transitions to trigger a re-layout and
// start new transitions
bool prevInLayout = inLayout;
+#if QT_CONFIG(quick_viewtransitions)
if (!inLayout) {
FxViewItem *actualItem = transitioner ? visibleItem(currentIndex) : nullptr;
if (actualItem && actualItem->transitionRunning())
inLayout = true;
}
+#endif
updateHighlight();
inLayout = prevInLayout;
}
@@ -1165,17 +1171,20 @@ void QQuickItemView::destroyRemoved()
{
Q_D(QQuickItemView);
+#if QT_CONFIG(quick_viewtransitions)
bool hasRemoveTransition = false;
bool hasRemoveTransitionAsTarget = false;
if (d->transitioner) {
hasRemoveTransition = d->transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, false);
hasRemoveTransitionAsTarget = d->transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, true);
}
+#endif
for (QList<FxViewItem*>::Iterator it = d->visibleItems.begin();
it != d->visibleItems.end();) {
FxViewItem *item = *it;
if (item->index == -1 && (!item->attached || item->attached->delayRemove() == false)) {
+#if QT_CONFIG(quick_viewtransitions)
if (hasRemoveTransitionAsTarget) {
// don't remove from visibleItems until next layout()
d->runDelayedRemoveTransition = true;
@@ -1184,9 +1193,12 @@ void QQuickItemView::destroyRemoved()
} else {
if (hasRemoveTransition)
d->runDelayedRemoveTransition = true;
+#endif
d->releaseItem(item, d->reusableFlag);
it = d->visibleItems.erase(it);
+#if QT_CONFIG(quick_viewtransitions)
}
+#endif
} else {
++it;
}
@@ -1201,8 +1213,10 @@ void QQuickItemView::modelUpdated(const QQmlChangeSet &changeSet, bool reset)
Q_D(QQuickItemView);
if (reset) {
cancelFlick();
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner)
d->transitioner->setPopulateTransitionEnabled(true);
+#endif
d->moveReason = QQuickItemViewPrivate::SetIndex;
d->regenerate();
if (d->highlight && d->currentItem) {
@@ -1212,8 +1226,10 @@ void QQuickItemView::modelUpdated(const QQmlChangeSet &changeSet, bool reset)
}
d->moveReason = QQuickItemViewPrivate::Other;
emit countChanged();
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner && d->transitioner->populateTransition)
d->forceLayoutPolish();
+#endif
} else {
if (d->inLayout) {
d->bufferedChanges.prepare(d->currentIndex, d->itemCount);
@@ -1449,8 +1465,10 @@ void QQuickItemView::componentComplete()
d->updateFooter();
d->updateViewport();
d->setPosition(d->contentStartOffset());
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner)
d->transitioner->setPopulateTransitionEnabled(true);
+#endif
if (d->isValid()) {
d->refill();
@@ -1487,7 +1505,9 @@ QQuickItemViewPrivate::QQuickItemViewPrivate()
, highlightRangeStart(0), highlightRangeEnd(0)
, highlightMoveDuration(150)
, headerComponent(nullptr), header(nullptr), footerComponent(nullptr), footer(nullptr)
+#if QT_CONFIG(quick_viewtransitions)
, transitioner(nullptr)
+#endif
, minExtent(0), maxExtent(0)
, ownModel(false), wrap(false)
, keyNavigationEnabled(true)
@@ -1495,7 +1515,10 @@ QQuickItemViewPrivate::QQuickItemViewPrivate()
, inLayout(false), inViewportMoved(false), forceLayout(false), currentIndexCleared(false)
, haveHighlightRange(false), autoHighlight(true), highlightRangeStartValid(false), highlightRangeEndValid(false)
, fillCacheBuffer(false), inRequest(false)
- , runDelayedRemoveTransition(false), delegateValidated(false), isClearing(false)
+#if QT_CONFIG(quick_viewtransitions)
+ , runDelayedRemoveTransition(false)
+#endif
+ , delegateValidated(false), isClearing(false)
{
bufferPause.addAnimationChangeListener(this, QAbstractAnimationJob::Completion);
bufferPause.setLoopCount(1);
@@ -1504,9 +1527,11 @@ QQuickItemViewPrivate::QQuickItemViewPrivate()
QQuickItemViewPrivate::~QQuickItemViewPrivate()
{
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner)
transitioner->setChangeListener(nullptr);
delete transitioner;
+#endif
}
bool QQuickItemViewPrivate::isValid() const
@@ -1682,11 +1707,13 @@ void QQuickItemViewPrivate::clear(bool onDestruction)
releaseVisibleItems(QQmlInstanceModel::NotReusable);
visibleIndex = 0;
+#if QT_CONFIG(quick_viewtransitions)
for (FxViewItem *item : std::as_const(releasePendingTransition)) {
item->releaseAfterTransition = false;
releaseItem(item, QQmlInstanceModel::NotReusable);
}
releasePendingTransition.clear();
+#endif
auto oldCurrentItem = currentItem;
releaseItem(currentItem, QQmlDelegateModel::NotReusable);
@@ -1836,12 +1863,15 @@ void QQuickItemViewPrivate::layout()
clear();
setPosition(contentStartOffset());
updateViewport();
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner)
transitioner->setPopulateTransitionEnabled(false);
+#endif
inLayout = false;
return;
}
+#if QT_CONFIG(quick_viewtransitions)
if (runDelayedRemoveTransition && transitioner
&& transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, false)) {
// assume that any items moving now are moving due to the remove - if they schedule
@@ -1849,6 +1879,7 @@ void QQuickItemViewPrivate::layout()
for (int i=0; i<visibleItems.size(); i++)
visibleItems[i]->transitionNextReposition(transitioner, QQuickItemViewTransitioner::RemoveTransition, false);
}
+#endif
ChangeResult insertionPosChanges;
ChangeResult removalPosChanges;
@@ -1862,6 +1893,7 @@ void QQuickItemViewPrivate::layout()
}
forceLayout = false;
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner && transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) {
// Give the view one more chance to refill itself,
// in case its size is changed such that more delegates become visible after component completed
@@ -1871,12 +1903,15 @@ void QQuickItemViewPrivate::layout()
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::PopulateTransition, true);
}
}
+#endif
updateSections();
layoutVisibleItems();
storeFirstVisibleItemPosition();
+#if QT_CONFIG(quick_viewtransitions)
int lastIndexInView = findLastIndexInView();
+#endif
refill();
markExtentsDirty();
updateHighlight();
@@ -1891,6 +1926,7 @@ void QQuickItemViewPrivate::layout()
updateViewport();
updateUnrequestedPositions();
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner) {
// items added in the last refill() may need to be transitioned in - e.g. a remove
// causes items to slide up into view
@@ -1931,11 +1967,14 @@ void QQuickItemViewPrivate::layout()
transitioner->setPopulateTransitionEnabled(false);
transitioner->resetTargetLists();
}
+#endif
if (!currentItem)
updateCurrent(currentIndex);
+#if QT_CONFIG(quick_viewtransitions)
runDelayedRemoveTransition = false;
+#endif
inLayout = false;
}
@@ -1991,6 +2030,7 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
removalResult.countChangeBeforeVisible += (correctedFirstVisibleIndex - r.index);
}
}
+#if QT_CONFIG(quick_viewtransitions)
if (runDelayedRemoveTransition) {
QQmlChangeSet::Change removal;
for (QList<FxViewItem*>::Iterator it = visibleItems.begin(); it != visibleItems.end();) {
@@ -2004,6 +2044,7 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
}
}
}
+#endif
*totalRemovalResult += removalResult;
if (!removals.isEmpty()) {
updateVisibleIndex();
@@ -2042,6 +2083,7 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
item->attached->emitAdd();
}
+#if QT_CONFIG(quick_viewtransitions)
// for each item that was moved directly into the view as a result of a move(),
// find the index it was moved from in order to set its initial position, so that we
// can transition it from this "original" position to its new position in the view
@@ -2057,13 +2099,16 @@ bool QQuickItemViewPrivate::applyModelChanges(ChangeResult *totalInsertionResult
}
}
}
+#endif
// reposition visibleItems.first() correctly so that the content y doesn't jump
if (removedCount != prevVisibleItemsCount)
repositionFirstItem(prevVisibleItemsFirst, prevVisibleItemsFirstPos, prevFirstItemInView, &insertionResult, &removalResult);
// Whatever removed/moved items remain are no longer visible items.
+#if QT_CONFIG(quick_viewtransitions)
prepareRemoveTransitions(&currentChanges.removedItems);
+#endif
for (auto it = currentChanges.removedItems.begin();
it != currentChanges.removedItems.end(); ++it) {
releaseItem(it.value(), reusableFlag);
@@ -2120,10 +2165,12 @@ bool QQuickItemViewPrivate::applyRemovalChange(const QQmlChangeSet::Change &remo
} else if (item->index >= removal.index + removal.count) {
// after removed items
item->index -= removal.count;
+#if QT_CONFIG(quick_viewtransitions)
if (removal.isMove())
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::MoveTransition, false);
else
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::RemoveTransition, false);
+#endif
++it;
} else {
// removed item
@@ -2157,7 +2204,9 @@ void QQuickItemViewPrivate::removeItem(FxViewItem *item, const QQmlChangeSet::Ch
}
if (removal.isMove()) {
currentChanges.removedItems.replace(removal.moveKey(item->index), item);
+#if QT_CONFIG(quick_viewtransitions)
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::MoveTransition, true);
+#endif
} else {
// track item so it is released later
currentChanges.removedItems.insert(QQmlChangeSet::MoveKey(), item);
@@ -2211,6 +2260,7 @@ void QQuickItemViewPrivate::repositionFirstItem(FxViewItem *prevVisibleItemsFirs
}
}
+#if QT_CONFIG(quick_viewtransitions)
void QQuickItemViewPrivate::createTransitioner()
{
if (!transitioner) {
@@ -2286,6 +2336,7 @@ void QQuickItemViewPrivate::viewItemTransitionFinished(QQuickItemViewTransitiona
}
}
}
+#endif
/*
This may return 0 if the item is being created asynchronously.
@@ -2299,6 +2350,7 @@ FxViewItem *QQuickItemViewPrivate::createItem(int modelIndex, QQmlIncubator::Inc
if (requestedIndex == modelIndex && incubationMode == QQmlIncubator::Asynchronous)
return nullptr;
+#if QT_CONFIG(quick_viewtransitions)
for (int i=0; i<releasePendingTransition.size(); i++) {
if (releasePendingTransition.at(i)->index == modelIndex
&& !releasePendingTransition.at(i)->isPendingRemoval()) {
@@ -2306,6 +2358,7 @@ FxViewItem *QQuickItemViewPrivate::createItem(int modelIndex, QQmlIncubator::Inc
return releasePendingTransition.takeAt(i);
}
}
+#endif
inRequest = true;
diff --git a/src/quick/items/qquickitemview_p.h b/src/quick/items/qquickitemview_p.h
index f74ca5177b..60def4cef4 100644
--- a/src/quick/items/qquickitemview_p.h
+++ b/src/quick/items/qquickitemview_p.h
@@ -57,6 +57,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickItemView : public QQuickFlickable
Q_PROPERTY(QQmlComponent *footer READ footer WRITE setFooter NOTIFY footerChanged)
Q_PROPERTY(QQuickItem *footerItem READ footerItem NOTIFY footerItemChanged)
+#if QT_CONFIG(quick_viewtransitions)
Q_PROPERTY(QQuickTransition *populate READ populateTransition WRITE setPopulateTransition NOTIFY populateTransitionChanged)
Q_PROPERTY(QQuickTransition *add READ addTransition WRITE setAddTransition NOTIFY addTransitionChanged)
Q_PROPERTY(QQuickTransition *addDisplaced READ addDisplacedTransition WRITE setAddDisplacedTransition NOTIFY addDisplacedTransitionChanged)
@@ -65,6 +66,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickItemView : public QQuickFlickable
Q_PROPERTY(QQuickTransition *remove READ removeTransition WRITE setRemoveTransition NOTIFY removeTransitionChanged)
Q_PROPERTY(QQuickTransition *removeDisplaced READ removeDisplacedTransition WRITE setRemoveDisplacedTransition NOTIFY removeDisplacedTransitionChanged)
Q_PROPERTY(QQuickTransition *displaced READ displacedTransition WRITE setDisplacedTransition NOTIFY displacedTransitionChanged)
+#endif
Q_PROPERTY(QQmlComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged)
Q_PROPERTY(QQuickItem *highlightItem READ highlightItem NOTIFY highlightItemChanged)
@@ -144,6 +146,7 @@ public:
void setHeader(QQmlComponent *);
QQuickItem *headerItem() const;
+#if QT_CONFIG(quick_viewtransitions)
QQuickTransition *populateTransition() const;
void setPopulateTransition(QQuickTransition *transition);
@@ -167,6 +170,7 @@ public:
QQuickTransition *displacedTransition() const;
void setDisplacedTransition(QQuickTransition *transition);
+#endif
QQmlComponent *highlight() const;
void setHighlight(QQmlComponent *);
@@ -233,6 +237,7 @@ Q_SIGNALS:
void headerItemChanged();
void footerItemChanged();
+#if QT_CONFIG(quick_viewtransitions)
void populateTransitionChanged();
void addTransitionChanged();
void addDisplacedTransitionChanged();
@@ -241,6 +246,7 @@ Q_SIGNALS:
void removeTransitionChanged();
void removeDisplacedTransitionChanged();
void displacedTransitionChanged();
+#endif
void highlightChanged();
void highlightItemChanged();
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h
index b978410bce..301ff6f326 100644
--- a/src/quick/items/qquickitemview_p_p.h
+++ b/src/quick/items/qquickitemview_p_p.h
@@ -21,7 +21,9 @@ QT_REQUIRE_CONFIG(quick_itemview);
#include "qquickitemview_p.h"
#include "qquickitemviewfxitem_p_p.h"
+#if QT_CONFIG(quick_viewtransitions)
#include "qquickitemviewtransition_p.h"
+#endif
#include "qquickflickable_p_p.h"
#include <QtQmlModels/private/qqmlobjectmodel_p.h>
#include <QtQmlModels/private/qqmldelegatemodel_p.h>
@@ -64,7 +66,12 @@ public:
};
-class Q_QUICK_AUTOTEST_EXPORT QQuickItemViewPrivate : public QQuickFlickablePrivate, public QQuickItemViewTransitionChangeListener, public QAnimationJobChangeListener
+class Q_QUICK_AUTOTEST_EXPORT QQuickItemViewPrivate
+ : public QQuickFlickablePrivate
+#if QT_CONFIG(quick_viewtransitions)
+ , public QQuickItemViewTransitionChangeListener
+#endif
+ , public QAnimationJobChangeListener
{
public:
Q_DECLARE_PUBLIC(QQuickItemView)
@@ -166,11 +173,13 @@ public:
void repositionFirstItem(FxViewItem *prevVisibleItemsFirst, qreal prevVisibleItemsFirstPos,
FxViewItem *prevFirstVisible, ChangeResult *insertionResult, ChangeResult *removalResult);
+#if QT_CONFIG(quick_viewtransitions)
void createTransitioner();
void prepareVisibleItemTransitions();
void prepareRemoveTransitions(QMultiHash<QQmlChangeSet::MoveKey, FxViewItem *> *removedItems);
bool prepareNonVisibleItemTransition(FxViewItem *item, const QRectF &viewBounds);
void viewItemTransitionFinished(QQuickItemViewTransitionableItem *item) override;
+#endif
int findMoveKeyIndex(QQmlChangeSet::MoveKey key, const QVector<QQmlChangeSet::Change> &changes) const;
@@ -187,7 +196,10 @@ public:
bool hasPendingChanges() const {
return currentChanges.hasPendingChanges()
|| bufferedChanges.hasPendingChanges()
- ||runDelayedRemoveTransition;
+#if QT_CONFIG(quick_viewtransitions)
+ ||runDelayedRemoveTransition
+#endif
+ ;
}
void refillOrLayout() {
@@ -266,8 +278,10 @@ public:
MovedItem(FxViewItem *i, QQmlChangeSet::MoveKey k)
: item(i), moveKey(k) {}
};
+#if QT_CONFIG(quick_viewtransitions)
QQuickItemViewTransitioner *transitioner;
QVector<FxViewItem *> releasePendingTransition;
+#endif
mutable qreal minExtent;
mutable qreal maxExtent;
@@ -286,7 +300,9 @@ public:
bool highlightRangeEndValid : 1;
bool fillCacheBuffer : 1;
bool inRequest : 1;
+#if QT_CONFIG(quick_viewtransitions)
bool runDelayedRemoveTransition : 1;
+#endif
bool delegateValidated : 1;
bool isClearing : 1;
@@ -333,7 +349,9 @@ protected:
QList<FxViewItem *> *newItems, QList<MovedItem> *movingIntoView) = 0;
virtual bool needsRefillForAddedOrRemovedIndex(int) const { return false; }
+#if QT_CONFIG(quick_viewtransitions)
virtual void translateAndTransitionItemsAfter(int afterIndex, const ChangeResult &insertionResult, const ChangeResult &removalResult) = 0;
+#endif
virtual void initializeViewItem(FxViewItem *) {}
virtual void initializeCurrentItem() {}
diff --git a/src/quick/items/qquickitemviewfxitem.cpp b/src/quick/items/qquickitemviewfxitem.cpp
index 70e122ca60..aca790c5ad 100644
--- a/src/quick/items/qquickitemviewfxitem.cpp
+++ b/src/quick/items/qquickitemviewfxitem.cpp
@@ -10,7 +10,9 @@ QT_BEGIN_NAMESPACE
QQuickItemViewFxItem::QQuickItemViewFxItem(QQuickItem *item, bool ownItem, QQuickItemChangeListener* changeListener)
: item(item)
, changeListener(changeListener)
+#if QT_CONFIG(quick_viewtransitions)
, transitionableItem(nullptr)
+#endif
, ownItem(ownItem)
, releaseAfterTransition(false)
, trackGeom(false)
@@ -19,8 +21,10 @@ QQuickItemViewFxItem::QQuickItemViewFxItem(QQuickItem *item, bool ownItem, QQuic
QQuickItemViewFxItem::~QQuickItemViewFxItem()
{
+#if QT_CONFIG(quick_viewtransitions)
delete transitionableItem;
transitionableItem = nullptr;
+#endif
if (ownItem && item) {
trackGeometry(false);
@@ -31,25 +35,42 @@ QQuickItemViewFxItem::~QQuickItemViewFxItem()
qreal QQuickItemViewFxItem::itemX() const
{
- return transitionableItem ? transitionableItem->itemX() : (item ? item->x() : 0);
+ return
+#if QT_CONFIG(quick_viewtransitions)
+ transitionableItem ? transitionableItem->itemX() :
+#endif
+ (item ? item->x() : 0);
}
qreal QQuickItemViewFxItem::itemY() const
{
- return transitionableItem ? transitionableItem->itemY() : (item ? item->y() : 0);
+ return
+#if QT_CONFIG(quick_viewtransitions)
+ transitionableItem ? transitionableItem->itemY() :
+#endif
+ (item ? item->y() : 0);
}
void QQuickItemViewFxItem::moveTo(const QPointF &pos, bool immediate)
{
+#if QT_CONFIG(quick_viewtransitions)
if (transitionableItem)
transitionableItem->moveTo(pos, immediate);
- else if (item)
+ else
+#else
+ Q_UNUSED(immediate)
+#endif
+ if (item)
item->setPosition(pos);
}
void QQuickItemViewFxItem::setVisible(bool visible)
{
- if (!visible && transitionableItem && transitionableItem->transitionScheduledOrRunning())
+ if (!visible
+#if QT_CONFIG(quick_viewtransitions)
+ && transitionableItem && transitionableItem->transitionScheduledOrRunning()
+#endif
+ )
return;
if (item)
QQuickItemPrivate::get(item)->setCulled(!visible);
@@ -87,6 +108,7 @@ void QQuickItemViewFxItem::setGeometry(const QRectF &geometry)
item->setSize(geometry.size());
}
+#if QT_CONFIG(quick_viewtransitions)
QQuickItemViewTransitioner::TransitionType QQuickItemViewFxItem::scheduledTransitionType() const
{
return transitionableItem ? transitionableItem->nextTransitionType : QQuickItemViewTransitioner::NoTransition;
@@ -126,6 +148,7 @@ void QQuickItemViewFxItem::startTransition(QQuickItemViewTransitioner *transitio
if (transitionableItem)
transitionableItem->startTransition(transitioner, index);
}
+#endif
QT_END_NAMESPACE
diff --git a/src/quick/items/qquickitemviewfxitem_p_p.h b/src/quick/items/qquickitemviewfxitem_p_p.h
index b453054a89..eec72fdcf3 100644
--- a/src/quick/items/qquickitemviewfxitem_p_p.h
+++ b/src/quick/items/qquickitemviewfxitem_p_p.h
@@ -17,7 +17,9 @@
#include <QtQuick/private/qtquickglobal_p.h>
#include <QtQuick/private/qquickitem_p.h>
+#if QT_CONFIG(quick_viewtransitions)
#include <QtQuick/private/qquickitemviewtransition_p.h>
+#endif
#include <private/qanimationjobutil_p.h>
QT_REQUIRE_CONFIG(quick_itemview);
@@ -42,6 +44,7 @@ public:
QRectF geometry() const;
void setGeometry(const QRectF &geometry);
+#if QT_CONFIG(quick_viewtransitions)
QQuickItemViewTransitioner::TransitionType scheduledTransitionType() const;
bool transitionScheduledOrRunning() const;
bool transitionRunning() const;
@@ -50,6 +53,7 @@ public:
void transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget);
bool prepareTransition(QQuickItemViewTransitioner *transitioner, const QRectF &viewBounds);
void startTransition(QQuickItemViewTransitioner *transitioner);
+#endif
// these are positions and sizes along the current direction of scrolling/flicking
virtual qreal position() const = 0;
@@ -62,7 +66,9 @@ public:
SelfDeletable m_selfDeletable;
QPointer<QQuickItem> item;
QQuickItemChangeListener *changeListener;
+#if QT_CONFIG(quick_viewtransitions)
QQuickItemViewTransitionableItem *transitionableItem;
+#endif
int index = -1;
bool ownItem : 1;
bool releaseAfterTransition : 1;
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 564d86f386..0111d7d7b2 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -75,7 +75,9 @@ public:
void layoutVisibleItems(int fromModelIndex = 0) override;
bool applyInsertionChange(const QQmlChangeSet::Change &insert, ChangeResult *changeResult, QList<FxViewItem *> *addedItems, QList<MovedItem> *movingIntoView) override;
+#if QT_CONFIG(quick_viewtransitions)
void translateAndTransitionItemsAfter(int afterIndex, const ChangeResult &insertionResult, const ChangeResult &removalResult) override;
+#endif
void updateSectionCriteria() override;
void updateSections() override;
@@ -756,7 +758,9 @@ bool QQuickListViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
if (!(item = static_cast<FxListItemSG*>(createItem(modelIndex, incubationMode))))
break;
qCDebug(lcItemViewDelegateLifecycle) << "refill: append item" << modelIndex << "pos" << pos << "buffer" << doBuffer << "item" << (QObject *)(item->item);
+#if QT_CONFIG(quick_viewtransitions)
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
+#endif
item->setPosition(pos, true);
if (item->item)
QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
@@ -775,7 +779,9 @@ bool QQuickListViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
qCDebug(lcItemViewDelegateLifecycle) << "refill: prepend item" << visibleIndex-1 << "current top pos" << visiblePos << "buffer" << doBuffer << "item" << (QObject *)(item->item);
--visibleIndex;
visiblePos -= item->size() + spacing;
+#if QT_CONFIG(quick_viewtransitions)
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
+#endif
item->setPosition(visiblePos, true);
if (item->item)
QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
@@ -788,11 +794,14 @@ bool QQuickListViewPrivate::addVisibleItems(qreal fillFrom, qreal fillTo, qreal
void QQuickListViewPrivate::removeItem(FxViewItem *item)
{
+#if QT_CONFIG(quick_viewtransitions)
if (item->transitionScheduledOrRunning()) {
qCDebug(lcItemViewDelegateLifecycle) << "\tnot releasing animating item" << item->index << (QObject *)(item->item);
item->releaseAfterTransition = true;
releasePendingTransition.append(item);
- } else {
+ } else
+#endif
+ {
qCDebug(lcItemViewDelegateLifecycle) << "\treleasing stationary item" << item->index << (QObject *)(item->item);
releaseItem(item, reusableFlag);
}
@@ -1590,8 +1599,10 @@ void QQuickListViewPrivate::itemGeometryChanged(QQuickItem *item, QQuickGeometry
// position all subsequent items
if (visibleItems.size() && item == visibleItems.constFirst()->item) {
FxListItemSG *listItem = static_cast<FxListItemSG*>(visibleItems.constFirst());
+#if QT_CONFIG(quick_viewtransitions)
if (listItem->transitionScheduledOrRunning())
return;
+#endif
if (orient == QQuickListView::Vertical) {
const qreal oldItemEndPosition = verticalLayoutDirection == QQuickItemView::BottomToTop ? -oldGeometry.y() : oldGeometry.y() + oldGeometry.height();
const qreal heightDiff = item->height() - oldGeometry.height();
@@ -3622,6 +3633,9 @@ void QQuickListViewPrivate::updateSectionCriteria()
bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &change, ChangeResult *insertResult, QList<FxViewItem *> *addedItems, QList<MovedItem> *movingIntoView)
{
+#if QT_CONFIG(quick_viewtransitions)
+ Q_UNUSED(movingIntoView)
+#endif
int modelIndex = change.index;
int count = change.count;
@@ -3664,10 +3678,12 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
for (FxViewItem *item : std::as_const(visibleItems)) {
if (item->index != -1 && item->index >= modelIndex) {
item->index += count;
+#if QT_CONFIG(quick_viewtransitions)
if (change.isMove())
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::MoveTransition, false);
else
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, false);
+#endif
}
}
@@ -3702,9 +3718,11 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
insertResult->changedFirstItem = true;
if (!change.isMove()) {
addedItems->append(item);
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner)
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, true);
else
+#endif
static_cast<FxListItemSG *>(item)->setPosition(pos, true);
}
insertResult->sizeChangesBeforeVisiblePos += item->size() + spacing;
@@ -3733,7 +3751,9 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
FxViewItem *item = nullptr;
if (change.isMove() && (item = currentChanges.removedItems.take(change.moveKey(it.index))))
item->index = it.index;
+#if QT_CONFIG(quick_viewtransitions)
bool newItem = !item;
+#endif
it.removedAtIndex = false;
if (!item)
item = createItem(it.index, QQmlIncubator::Synchronous);
@@ -3750,13 +3770,17 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
if (change.isMove()) {
// we know this is a move target, since move displaced items that are
// shuffled into view due to a move would be added in refill()
+#if QT_CONFIG(quick_viewtransitions)
if (newItem && transitioner && transitioner->canTransition(QQuickItemViewTransitioner::MoveTransition, true))
movingIntoView->append(MovedItem(item, change.moveKey(item->index)));
+#endif
} else {
addedItems->append(item);
+#if QT_CONFIG(quick_viewtransitions)
if (transitioner)
item->transitionNextReposition(transitioner, QQuickItemViewTransitioner::AddTransition, true);
else
+#endif
static_cast<FxListItemSG *>(item)->setPosition(pos, true);
}
insertResult->sizeChangesAfterVisiblePos += item->size() + spacing;
@@ -3770,13 +3794,17 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
FxViewItem *item = visibleItems.at(index);
if (prevItem->index != item->index - 1) {
int i = index;
+#if QT_CONFIG(quick_viewtransitions)
qreal prevPos = prevItem->position();
+#endif
while (i < visibleItems.size()) {
FxListItemSG *nvItem = static_cast<FxListItemSG *>(visibleItems.takeLast());
insertResult->sizeChangesAfterVisiblePos -= nvItem->size() + spacing;
addedItems->removeOne(nvItem);
+#if QT_CONFIG(quick_viewtransitions)
if (nvItem->transitionScheduledOrRunning())
nvItem->setPosition(prevPos + (nvItem->index - prevItem->index) * averageSize);
+#endif
removeItem(nvItem);
}
}
@@ -3788,6 +3816,7 @@ bool QQuickListViewPrivate::applyInsertionChange(const QQmlChangeSet::Change &ch
return visibleAffected;
}
+#if QT_CONFIG(quick_viewtransitions)
void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex, const ChangeResult &insertionResult, const ChangeResult &removalResult)
{
Q_UNUSED(insertionResult);
@@ -3821,6 +3850,7 @@ void QQuickListViewPrivate::translateAndTransitionItemsAfter(int afterModelIndex
}
}
}
+#endif
/*!
\qmlmethod QtQuick::ListView::positionViewAtIndex(int index, PositionMode mode)
diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp
index 5bb1f4f6d9..b1d50c72d4 100644
--- a/src/quick/items/qquickpositioners.cpp
+++ b/src/quick/items/qquickpositioners.cpp
@@ -33,7 +33,9 @@ void QQuickBasePositionerPrivate::unwatchChanges(QQuickItem* other)
QQuickBasePositioner::PositionedItem::PositionedItem(QQuickItem *i)
: item(i)
+#if QT_CONFIG(quick_viewtransitions)
, transitionableItem(nullptr)
+#endif
, index(-1)
, isNew(false)
, isVisible(true)
@@ -46,27 +48,40 @@ QQuickBasePositioner::PositionedItem::PositionedItem(QQuickItem *i)
QQuickBasePositioner::PositionedItem::~PositionedItem()
{
+#if QT_CONFIG(quick_viewtransitions)
delete transitionableItem;
+#endif
}
qreal QQuickBasePositioner::PositionedItem::itemX() const
{
- return transitionableItem ? transitionableItem->itemX() : item->x();
+ return
+#if QT_CONFIG(quick_viewtransitions)
+ transitionableItem ? transitionableItem->itemX() :
+#endif
+ item->x();
}
qreal QQuickBasePositioner::PositionedItem::itemY() const
{
- return transitionableItem ? transitionableItem->itemY() : item->y();
+ return
+#if QT_CONFIG(quick_viewtransitions)
+ transitionableItem ? transitionableItem->itemY() :
+#endif
+ item->y();
}
void QQuickBasePositioner::PositionedItem::moveTo(const QPointF &pos)
{
+#if QT_CONFIG(quick_viewtransitions)
if (transitionableItem)
transitionableItem->moveTo(pos);
else
+#endif
item->setPosition(pos);
}
+#if QT_CONFIG(quick_viewtransitions)
void QQuickBasePositioner::PositionedItem::transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget)
{
if (!transitioner)
@@ -86,6 +101,7 @@ void QQuickBasePositioner::PositionedItem::startTransition(QQuickItemViewTransit
if (transitionableItem)
transitionableItem->startTransition(transitioner, index);
}
+#endif
void QQuickBasePositioner::PositionedItem::updatePadding(qreal lp, qreal tp, qreal rp, qreal bp)
{
@@ -132,7 +148,9 @@ QQuickBasePositioner::QQuickBasePositioner(QQuickBasePositionerPrivate &dd, Posi
QQuickBasePositioner::~QQuickBasePositioner()
{
Q_D(QQuickBasePositioner);
+#if QT_CONFIG(quick_viewtransitions)
delete d->transitioner;
+#endif
for (int i = 0; i < positionedItems.count(); ++i)
d->unwatchChanges(positionedItems.at(i).item);
for (int i = 0; i < unpositionedItems.count(); ++i)
@@ -164,6 +182,7 @@ void QQuickBasePositioner::setSpacing(qreal s)
emit spacingChanged();
}
+#if QT_CONFIG(quick_viewtransitions)
QQuickTransition *QQuickBasePositioner::populate() const
{
Q_D(const QQuickBasePositioner);
@@ -216,17 +235,24 @@ void QQuickBasePositioner::setAdd(QQuickTransition *add)
d->transitioner->addTransition = add;
emit addChanged();
}
+#endif
void QQuickBasePositioner::componentComplete()
{
+#if QT_CONFIG(quick_viewtransitions)
Q_D(QQuickBasePositioner);
+#endif
QQuickItem::componentComplete();
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner)
d->transitioner->setPopulateTransitionEnabled(true);
+#endif
positionedItems.reserve(childItems().size());
prePositioning();
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner)
d->transitioner->setPopulateTransitionEnabled(false);
+#endif
}
void QQuickBasePositioner::itemChange(ItemChange change, const ItemChangeData &value)
@@ -275,7 +301,9 @@ void QQuickBasePositioner::prePositioning()
for (int ii = 0; ii < unpositionedItems.count(); ii++)
oldItems.append(unpositionedItems[ii]);
unpositionedItems.clear();
+#if QT_CONFIG(quick_viewtransitions)
int addedIndex = -1;
+#endif
for (int ii = 0; ii < children.size(); ++ii) {
QQuickItem *child = children.at(ii);
@@ -295,6 +323,7 @@ void QQuickBasePositioner::prePositioning()
posItem.index = positionedItems.count();
positionedItems.append(posItem);
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner) {
if (addedIndex < 0)
addedIndex = posItem.index;
@@ -304,6 +333,7 @@ void QQuickBasePositioner::prePositioning()
else if (!d->transitioner->populateTransitionEnabled())
theItem->transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::AddTransition, true);
}
+#endif
}
} else {
PositionedItem *item = &oldItems[wIdx];
@@ -320,11 +350,13 @@ void QQuickBasePositioner::prePositioning()
item->index = positionedItems.count();
positionedItems.append(*item);
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner) {
if (addedIndex < 0)
addedIndex = item->index;
positionedItems[positionedItems.count()-1].transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::AddTransition, true);
}
+#endif
} else {
item->isNew = false;
item->index = positionedItems.count();
@@ -333,6 +365,7 @@ void QQuickBasePositioner::prePositioning()
}
}
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner) {
for (int i=0; i<positionedItems.count(); i++) {
if (!positionedItems[i].isNew) {
@@ -346,6 +379,7 @@ void QQuickBasePositioner::prePositioning()
}
}
}
+#endif
QSizeF contentSize(0,0);
reportConflictingAnchors();
@@ -354,6 +388,7 @@ void QQuickBasePositioner::prePositioning()
updateAttachedProperties();
}
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner) {
QRectF viewBounds(QPointF(), contentSize);
for (int i=0; i<positionedItems.count(); i++)
@@ -362,6 +397,7 @@ void QQuickBasePositioner::prePositioning()
positionedItems[i].startTransition(d->transitioner);
d->transitioner->resetTargetLists();
}
+#endif
d->doingPositioning = false;
@@ -403,13 +439,17 @@ void QQuickBasePositioner::positionItemY(qreal y, PositionedItem *target)
void QQuickBasePositioner::removePositionedItem(QPODVector<PositionedItem,8> *items, int index)
{
Q_ASSERT(index >= 0 && index < items->count());
+#if QT_CONFIG(quick_viewtransitions)
delete items->at(index).transitionableItem;
+#endif
items->remove(index);
}
void QQuickBasePositioner::clearPositionedItems(QPODVector<PositionedItem,8> *items)
{
+#if QT_CONFIG(quick_viewtransitions)
for (int i=0; i<items->count(); i++)
delete items->at(i).transitionableItem;
+#endif
items->clear();
}
diff --git a/src/quick/items/qquickpositioners_p.h b/src/quick/items/qquickpositioners_p.h
index 42ab3bc6a7..326106a601 100644
--- a/src/quick/items/qquickpositioners_p.h
+++ b/src/quick/items/qquickpositioners_p.h
@@ -20,7 +20,9 @@
QT_REQUIRE_CONFIG(quick_positioners);
#include "qquickimplicitsizeitem_p.h"
+#if QT_CONFIG(quick_viewtransitions)
#include "qquickitemviewtransition_p.h"
+#endif
#include <private/qpodvector_p.h>
@@ -67,9 +69,11 @@ class Q_QUICK_PRIVATE_EXPORT QQuickBasePositioner : public QQuickImplicitSizeIte
Q_OBJECT
Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing NOTIFY spacingChanged)
+#if QT_CONFIG(quick_viewtransitions)
Q_PROPERTY(QQuickTransition *populate READ populate WRITE setPopulate NOTIFY populateChanged)
Q_PROPERTY(QQuickTransition *move READ move WRITE setMove NOTIFY moveChanged)
Q_PROPERTY(QQuickTransition *add READ add WRITE setAdd NOTIFY addChanged)
+#endif
Q_PROPERTY(qreal padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged REVISION(2, 6))
Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY topPaddingChanged REVISION(2, 6))
@@ -91,6 +95,7 @@ public:
qreal spacing() const;
void setSpacing(qreal);
+#if QT_CONFIG(quick_viewtransitions)
QQuickTransition *populate() const;
void setPopulate(QQuickTransition *);
@@ -99,6 +104,7 @@ public:
QQuickTransition *add() const;
void setAdd(QQuickTransition *);
+#endif
static QQuickPositionerAttached *qmlAttachedProperties(QObject *obj);
@@ -164,14 +170,18 @@ protected:
void moveTo(const QPointF &pos);
+#if QT_CONFIG(quick_viewtransitions)
void transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget);
bool prepareTransition(QQuickItemViewTransitioner *transitioner, const QRectF &viewBounds);
void startTransition(QQuickItemViewTransitioner *transitioner);
+#endif
void updatePadding(qreal lp, qreal tp, qreal rp, qreal bp);
QQuickItem *item;
+#if QT_CONFIG(quick_viewtransitions)
QQuickItemViewTransitionableItem *transitionableItem;
+#endif
int index;
bool isNew;
bool isVisible;
diff --git a/src/quick/items/qquickpositioners_p_p.h b/src/quick/items/qquickpositioners_p_p.h
index f91b093684..004a0f5ed1 100644
--- a/src/quick/items/qquickpositioners_p_p.h
+++ b/src/quick/items/qquickpositioners_p_p.h
@@ -54,7 +54,10 @@ public:
QQuickBasePositionerPrivate()
: spacing(0), type(QQuickBasePositioner::None)
- , transitioner(0), positioningDirty(false)
+#if QT_CONFIG(quick_viewtransitions)
+ , transitioner(0)
+#endif
+ , positioningDirty(false)
, doingPositioning(false), anchorConflict(false), layoutDirection(Qt::LeftToRight)
{
@@ -68,7 +71,9 @@ public:
qreal spacing;
QQuickBasePositioner::PositionerType type;
+#if QT_CONFIG(quick_viewtransitions)
QQuickItemViewTransitioner *transitioner;
+#endif
void watchChanges(QQuickItem *other);
void unwatchChanges(QQuickItem* other);
diff --git a/src/quicktemplates/CMakeLists.txt b/src/quicktemplates/CMakeLists.txt
index 57f4897b53..50f4842eee 100644
--- a/src/quicktemplates/CMakeLists.txt
+++ b/src/quicktemplates/CMakeLists.txt
@@ -94,8 +94,6 @@ qt_internal_add_qml_module(QuickTemplates2
qquicksplitview.cpp qquicksplitview_p.h
qquickstackelement.cpp
qquickstackelement_p_p.h
- qquickstacktransition.cpp
- qquickstacktransition_p_p.h
qquickstackview.cpp qquickstackview_p.cpp qquickstackview_p.h
qquickstackview_p_p.h
qquickswipe_p.h
@@ -182,6 +180,12 @@ qt_internal_extend_target(QuickTemplates2 CONDITION QT_FEATURE_quicktemplates2_c
qquickweeknumbermodel.cpp qquickweeknumbermodel_p.h
)
+qt_internal_extend_target(QuickTemplates2 CONDITION QT_FEATURE_quick_viewtransitions
+ SOURCES
+ qquickstacktransition.cpp
+ qquickstacktransition_p_p.h
+)
+
qt_internal_extend_Target(qtquicktemplates2plugin
SOURCES
qtquicktemplates2plugin.cpp
diff --git a/src/quicktemplates/qquickstackelement.cpp b/src/quicktemplates/qquickstackelement.cpp
index f8001a2980..417aa41643 100644
--- a/src/quicktemplates/qquickstackelement.cpp
+++ b/src/quicktemplates/qquickstackelement.cpp
@@ -15,6 +15,7 @@
QT_BEGIN_NAMESPACE
+#if QT_CONFIG(quick_viewtransitions)
static QQuickStackViewAttached *attachedStackObject(QQuickStackElement *element)
{
QQuickStackViewAttached *attached = qobject_cast<QQuickStackViewAttached *>(qmlAttachedPropertiesObject<QQuickStackView>(element->item, false));
@@ -22,6 +23,7 @@ static QQuickStackViewAttached *attachedStackObject(QQuickStackElement *element)
QQuickStackViewAttachedPrivate::get(attached)->element = element;
return attached;
}
+#endif
class QQuickStackIncubator : public QQmlIncubator
{
@@ -44,18 +46,23 @@ private:
};
QQuickStackElement::QQuickStackElement()
+#if QT_CONFIG(quick_viewtransitions)
: QQuickItemViewTransitionableItem(nullptr)
+#endif
{
}
QQuickStackElement::~QQuickStackElement()
{
+#if QT_CONFIG(quick_viewtransitions)
if (item)
QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Destroyed);
+#endif
if (ownComponent)
delete component;
+#if QT_CONFIG(quick_viewtransitions)
QQuickStackViewAttached *attached = attachedStackObject(this);
if (item) {
if (ownItem) {
@@ -79,6 +86,7 @@ QQuickStackElement::~QQuickStackElement()
if (attached)
emit attached->removed();
+#endif
}
QQuickStackElement *QQuickStackElement::fromString(const QString &str, QQuickStackView *view, QString *error)
@@ -110,9 +118,11 @@ QQuickStackElement *QQuickStackElement::fromObject(QObject *object, QQuickStackV
QQuickStackElement *element = new QQuickStackElement;
element->component = qobject_cast<QQmlComponent *>(object);
+#if QT_CONFIG(quick_viewtransitions)
element->item = qobject_cast<QQuickItem *>(object);
if (element->item)
element->originalParent = element->item->parentItem();
+#endif
return element;
}
@@ -202,9 +212,11 @@ void QQuickStackElement::setIndex(int value)
return;
index = value;
+#if QT_CONFIG(quick_viewtransitions)
QQuickStackViewAttached *attached = attachedStackObject(this);
if (attached)
emit attached->indexChanged();
+#endif
}
void QQuickStackElement::setView(QQuickStackView *value)
@@ -213,9 +225,11 @@ void QQuickStackElement::setView(QQuickStackView *value)
return;
view = value;
+#if QT_CONFIG(quick_viewtransitions)
QQuickStackViewAttached *attached = attachedStackObject(this);
if (attached)
emit attached->viewChanged();
+#endif
}
void QQuickStackElement::setStatus(QQuickStackView::Status value)
@@ -224,6 +238,7 @@ void QQuickStackElement::setStatus(QQuickStackView::Status value)
return;
status = value;
+#if QT_CONFIG(quick_viewtransitions)
QQuickStackViewAttached *attached = attachedStackObject(this);
if (!attached)
return;
@@ -247,17 +262,25 @@ void QQuickStackElement::setStatus(QQuickStackView::Status value)
}
emit attached->statusChanged();
+#endif
}
void QQuickStackElement::setVisible(bool visible)
{
+#if QT_CONFIG(quick_viewtransitions)
QQuickStackViewAttached *attached = attachedStackObject(this);
- if (!item || (attached && QQuickStackViewAttachedPrivate::get(attached)->explicitVisible))
+#endif
+ if (!item
+#if QT_CONFIG(quick_viewtransitions)
+ || (attached && QQuickStackViewAttachedPrivate::get(attached)->explicitVisible)
+#endif
+ )
return;
item->setVisible(visible);
}
+#if QT_CONFIG(quick_viewtransitions)
void QQuickStackElement::transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget)
{
if (transitioner)
@@ -294,10 +317,13 @@ void QQuickStackElement::completeTransition(QQuickTransition *quickTransition)
{
QQuickItemViewTransitionableItem::completeTransition(quickTransition);
}
+#endif
void QQuickStackElement::itemDestroyed(QQuickItem *)
{
+#if QT_CONFIG(quick_viewtransitions)
item = nullptr;
+#endif
}
QT_END_NAMESPACE
diff --git a/src/quicktemplates/qquickstackelement_p_p.h b/src/quicktemplates/qquickstackelement_p_p.h
index 00b150805d..b9228e951a 100644
--- a/src/quicktemplates/qquickstackelement_p_p.h
+++ b/src/quicktemplates/qquickstackelement_p_p.h
@@ -17,7 +17,9 @@
#include <QtQuickTemplates2/private/qquickstackview_p.h>
#include <QtQuickTemplates2/private/qquickcontrol_p_p.h>
+#if QT_CONFIG(quick_viewtransitions)
#include <QtQuick/private/qquickitemviewtransition_p.h>
+#endif
#include <QtQuick/private/qquickitemchangelistener_p.h>
#include <QtQml/private/qv4persistent_p.h>
@@ -28,7 +30,11 @@ class QQmlComponent;
struct QQuickStackTransition;
class RequiredProperties;
-class QQuickStackElement : public QQuickItemViewTransitionableItem, public QQuickItemChangeListener
+class QQuickStackElement :
+#if QT_CONFIG(quick_viewtransitions)
+ public QQuickItemViewTransitionableItem,
+#endif
+ public QQuickItemChangeListener
{
QQuickStackElement();
@@ -47,10 +53,12 @@ public:
void setStatus(QQuickStackView::Status status);
void setVisible(bool visible);
+#if QT_CONFIG(quick_viewtransitions)
void transitionNextReposition(QQuickItemViewTransitioner *transitioner, QQuickItemViewTransitioner::TransitionType type, bool asTarget);
bool prepareTransition(QQuickItemViewTransitioner *transitioner, const QRectF &viewBounds);
void startTransition(QQuickItemViewTransitioner *transitioner, QQuickStackView::Status status);
void completeTransition(QQuickTransition *quickTransition);
+#endif
void itemDestroyed(QQuickItem *item) override;
@@ -67,6 +75,9 @@ public:
QQuickStackView::Status status = QQuickStackView::Inactive;
QV4::PersistentValue properties;
QV4::PersistentValue qmlCallingContext;
+#if !QT_CONFIG(quick_viewtransitions)
+ QQuickItem *item;
+#endif
};
QT_END_NAMESPACE
diff --git a/src/quicktemplates/qquickstacktransition_p_p.h b/src/quicktemplates/qquickstacktransition_p_p.h
index e68f1bb7a1..d42e1981c0 100644
--- a/src/quicktemplates/qquickstacktransition_p_p.h
+++ b/src/quicktemplates/qquickstacktransition_p_p.h
@@ -15,6 +15,10 @@
// We mean it.
//
+#include <QtQuick/private/qtquickglobal_p.h>
+
+QT_REQUIRE_CONFIG(quick_viewtransitions);
+
#include <QtQuickTemplates2/private/qquickstackview_p.h>
#include <QtQuick/private/qquickitemviewtransition_p.h>
diff --git a/src/quicktemplates/qquickstackview.cpp b/src/quicktemplates/qquickstackview.cpp
index c523fe6262..d232ae5b84 100644
--- a/src/quicktemplates/qquickstackview.cpp
+++ b/src/quicktemplates/qquickstackview.cpp
@@ -4,7 +4,9 @@
#include "qquickstackview_p.h"
#include "qquickstackview_p_p.h"
#include "qquickstackelement_p_p.h"
+#if QT_CONFIG(quick_viewtransitions)
#include "qquickstacktransition_p_p.h"
+#endif
#include <QtCore/qscopedvaluerollback.h>
#include <QtQml/qjsvalue.h>
@@ -354,10 +356,12 @@ QQuickStackView::QQuickStackView(QQuickItem *parent)
QQuickStackView::~QQuickStackView()
{
Q_D(QQuickStackView);
+#if QT_CONFIG(quick_viewtransitions)
if (d->transitioner) {
d->transitioner->setChangeListener(nullptr);
delete d->transitioner;
}
+#endif
qDeleteAll(d->removing);
qDeleteAll(d->removed);
qDeleteAll(d->elements);
@@ -543,10 +547,12 @@ void QQuickStackView::push(QQmlV4Function *args)
QV4::ExecutionEngine *v4 = args->v4engine();
QV4::Scope scope(v4);
+#if QT_CONFIG(quick_viewtransitions)
Operation operation = d->elements.isEmpty() ? Immediate : PushTransition;
QV4::ScopedValue lastArg(scope, (*args)[args->length() - 1]);
if (lastArg->isInt32())
operation = static_cast<Operation>(lastArg->toInt32());
+#endif
QStringList errors;
QList<QQuickStackElement *> elements = d->parseElements(0, args, &errors);
@@ -570,17 +576,21 @@ void QQuickStackView::push(QQmlV4Function *args)
return;
}
+#if QT_CONFIG(quick_viewtransitions)
QQuickStackElement *exit = nullptr;
if (!d->elements.isEmpty())
exit = d->elements.top();
+#endif
int oldDepth = d->elements.size();
if (d->pushElements(elements)) {
d->depthChange(d->elements.size(), oldDepth);
QQuickStackElement *enter = d->elements.top();
+#if QT_CONFIG(quick_viewtransitions)
d->startTransition(QQuickStackTransition::pushEnter(operation, enter, this),
QQuickStackTransition::pushExit(operation, exit, this),
operation == Immediate);
+#endif
d->setCurrentItem(enter);
}
@@ -671,12 +681,14 @@ void QQuickStackView::pop(QQmlV4Function *args)
}
}
+#if QT_CONFIG(quick_viewtransitions)
Operation operation = PopTransition;
if (argc > 0) {
QV4::ScopedValue lastArg(scope, (*args)[argc - 1]);
if (lastArg->isInt32())
operation = static_cast<Operation>(lastArg->toInt32());
}
+#endif
QQuickItem *previousItem = nullptr;
@@ -687,9 +699,11 @@ void QQuickStackView::pop(QQmlV4Function *args)
previousItem = exit->item;
}
d->depthChange(d->elements.size(), oldDepth);
+#if QT_CONFIG(quick_viewtransitions)
d->startTransition(QQuickStackTransition::popExit(operation, exit, this),
QQuickStackTransition::popEnter(operation, enter, this),
operation == Immediate);
+#endif
d->setCurrentItem(enter);
}
@@ -812,10 +826,12 @@ void QQuickStackView::replace(QQmlV4Function *args)
QV4::ExecutionEngine *v4 = args->v4engine();
QV4::Scope scope(v4);
+#if QT_CONFIG(quick_viewtransitions)
Operation operation = d->elements.isEmpty() ? Immediate : ReplaceTransition;
QV4::ScopedValue lastArg(scope, (*args)[args->length() - 1]);
if (lastArg->isInt32())
operation = static_cast<Operation>(lastArg->toInt32());
+#endif
QQuickStackElement *target = nullptr;
QV4::ScopedValue firstArg(scope, (*args)[0]);
@@ -849,9 +865,11 @@ void QQuickStackView::replace(QQmlV4Function *args)
d->removing.insert(exit);
}
QQuickStackElement *enter = d->elements.top();
+#if QT_CONFIG(quick_viewtransitions)
d->startTransition(QQuickStackTransition::replaceExit(operation, exit, this),
QQuickStackTransition::replaceEnter(operation, enter, this),
operation == Immediate);
+#endif
d->setCurrentItem(enter);
}
@@ -894,6 +912,9 @@ bool QQuickStackView::isEmpty() const
*/
void QQuickStackView::clear(Operation operation)
{
+#if !QT_CONFIG(quick_viewtransitions)
+ Q_UNUSED(operation)
+#endif
Q_D(QQuickStackView);
if (d->elements.isEmpty())
return;
@@ -906,6 +927,7 @@ void QQuickStackView::clear(Operation operation)
QScopedValueRollback<bool> modifyingElements(d->modifyingElements, true);
QScopedValueRollback<QString> operationNameRollback(d->operation, operationName);
+#if QT_CONFIG(quick_viewtransitions)
if (operation != Immediate) {
QQuickStackElement *exit = d->elements.pop();
exit->removal = true;
@@ -913,6 +935,7 @@ void QQuickStackView::clear(Operation operation)
d->startTransition(QQuickStackTransition::popExit(operation, exit, this),
QQuickStackTransition::popEnter(operation, nullptr, this), false);
}
+#endif
int oldDepth = d->elements.size();
d->setCurrentItem(nullptr);
@@ -945,6 +968,7 @@ void QQuickStackView::setInitialItem(const QJSValue &item)
d->initialItem = item;
}
+#if QT_CONFIG(quick_viewtransitions)
/*!
\qmlproperty Transition QtQuick.Controls::StackView::popEnter
@@ -1106,6 +1130,7 @@ void QQuickStackView::setReplaceExit(QQuickTransition *exit)
d->transitioner->moveDisplacedTransition = exit;
emit replaceExitChanged();
}
+#endif
void QQuickStackView::componentComplete()
{
diff --git a/src/quicktemplates/qquickstackview_p.cpp b/src/quicktemplates/qquickstackview_p.cpp
index 99127d84b6..e6fd77f9fa 100644
--- a/src/quicktemplates/qquickstackview_p.cpp
+++ b/src/quicktemplates/qquickstackview_p.cpp
@@ -3,7 +3,9 @@
#include "qquickstackview_p_p.h"
#include "qquickstackelement_p_p.h"
+#if QT_CONFIG(quick_viewtransitions)
#include "qquickstacktransition_p_p.h"
+#endif
#include <QtQml/qqmlinfo.h>
#include <QtQml/qqmllist.h>
@@ -204,6 +206,7 @@ bool QQuickStackViewPrivate::replaceElements(QQuickStackElement *target, const Q
return pushElements(elems);
}
+#if QT_CONFIG(quick_viewtransitions)
void QQuickStackViewPrivate::ensureTransitioner()
{
if (!transitioner) {
@@ -301,6 +304,7 @@ void QQuickStackViewPrivate::viewItemTransitionFinished(QQuickItemViewTransition
removing.remove(element);
}
+#endif
void QQuickStackViewPrivate::setBusy(bool b)
{
diff --git a/src/quicktemplates/qquickstackview_p.h b/src/quicktemplates/qquickstackview_p.h
index b36976a395..ce53f3f13b 100644
--- a/src/quicktemplates/qquickstackview_p.h
+++ b/src/quicktemplates/qquickstackview_p.h
@@ -33,12 +33,14 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickStackView : public QQuickControl
Q_PROPERTY(int depth READ depth NOTIFY depthChanged FINAL)
Q_PROPERTY(QQuickItem *currentItem READ currentItem NOTIFY currentItemChanged FINAL)
Q_PROPERTY(QJSValue initialItem READ initialItem WRITE setInitialItem FINAL)
+#if QT_CONFIG(quick_viewtransitions)
Q_PROPERTY(QQuickTransition *popEnter READ popEnter WRITE setPopEnter NOTIFY popEnterChanged FINAL)
Q_PROPERTY(QQuickTransition *popExit READ popExit WRITE setPopExit NOTIFY popExitChanged FINAL)
Q_PROPERTY(QQuickTransition *pushEnter READ pushEnter WRITE setPushEnter NOTIFY pushEnterChanged FINAL)
Q_PROPERTY(QQuickTransition *pushExit READ pushExit WRITE setPushExit NOTIFY pushExitChanged FINAL)
Q_PROPERTY(QQuickTransition *replaceEnter READ replaceEnter WRITE setReplaceEnter NOTIFY replaceEnterChanged FINAL)
Q_PROPERTY(QQuickTransition *replaceExit READ replaceExit WRITE setReplaceExit NOTIFY replaceExitChanged FINAL)
+#endif
// 2.3 (Qt 5.10)
Q_PROPERTY(bool empty READ isEmpty NOTIFY emptyChanged FINAL REVISION(2, 3))
QML_NAMED_ELEMENT(StackView)
@@ -66,6 +68,7 @@ public:
QJSValue initialItem() const;
void setInitialItem(const QJSValue &item);
+#if QT_CONFIG(quick_viewtransitions)
QQuickTransition *popEnter() const;
void setPopEnter(QQuickTransition *enter);
@@ -83,6 +86,7 @@ public:
QQuickTransition *replaceExit() const;
void setReplaceExit(QQuickTransition *exit);
+#endif
enum LoadBehavior {
DontLoad,
@@ -116,12 +120,14 @@ Q_SIGNALS:
void busyChanged();
void depthChanged();
void currentItemChanged();
+#if QT_CONFIG(quick_viewtransitions)
void popEnterChanged();
void popExitChanged();
void pushEnterChanged();
void pushExitChanged();
void replaceEnterChanged();
void replaceExitChanged();
+#endif
// 2.3 (Qt 5.10)
Q_REVISION(2, 3) void emptyChanged();
diff --git a/src/quicktemplates/qquickstackview_p_p.h b/src/quicktemplates/qquickstackview_p_p.h
index 2b86458edc..97f26c64e4 100644
--- a/src/quicktemplates/qquickstackview_p_p.h
+++ b/src/quicktemplates/qquickstackview_p_p.h
@@ -17,7 +17,9 @@
#include <QtQuickTemplates2/private/qquickstackview_p.h>
#include <QtQuickTemplates2/private/qquickcontrol_p_p.h>
+#if QT_CONFIG(quick_viewtransitions)
#include <QtQuick/private/qquickitemviewtransition_p.h>
+#endif
#include <QtQuick/private/qquickitemchangelistener_p.h>
#include <QtQml/private/qv4value_p.h>
#include <QtQml/private/qqmlcontextdata_p.h>
@@ -29,7 +31,10 @@ QT_BEGIN_NAMESPACE
class QQuickStackElement;
struct QQuickStackTransition;
-class QQuickStackViewPrivate : public QQuickControlPrivate, public QQuickItemViewTransitionChangeListener
+class QQuickStackViewPrivate : public QQuickControlPrivate
+#if QT_CONFIG(quick_viewtransitions)
+ , public QQuickItemViewTransitionChangeListener
+#endif
{
Q_DECLARE_PUBLIC(QQuickStackView)
@@ -53,11 +58,13 @@ public:
bool popElements(QQuickStackElement *element);
bool replaceElements(QQuickStackElement *element, const QList<QQuickStackElement *> &elements);
+#if QT_CONFIG(quick_viewtransitions)
void ensureTransitioner();
void startTransition(const QQuickStackTransition &first, const QQuickStackTransition &second, bool immediate);
void completeTransition(QQuickStackElement *element, QQuickTransition *transition, QQuickStackView::Status status);
void viewItemTransitionFinished(QQuickItemViewTransitionableItem *item) override;
+#endif
void setBusy(bool busy);
void depthChange(int newDepth, int oldDepth);
@@ -69,10 +76,15 @@ public:
QSet<QQuickStackElement*> removing;
QList<QQuickStackElement*> removed;
QStack<QQuickStackElement *> elements;
+#if QT_CONFIG(quick_viewtransitions)
QQuickItemViewTransitioner *transitioner = nullptr;
+#endif
};
-class QQuickStackViewAttachedPrivate : public QObjectPrivate, public QQuickItemChangeListener
+class QQuickStackViewAttachedPrivate : public QObjectPrivate
+//#if QT_CONFIG(quick_viewtransitions)
+ , public QQuickItemChangeListener
+//#endif
{
Q_DECLARE_PUBLIC(QQuickStackViewAttached)
@@ -82,7 +94,9 @@ public:
return attached->d_func();
}
+//#if QT_CONFIG(quick_viewtransitions)
void itemParentChanged(QQuickItem *item, QQuickItem *parent) override;
+//#endif
bool explicitVisible = false;
QQuickStackElement *element = nullptr;