break;
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(colPos, rowPos, true);
- item->item->setVisible(!doBuffer);
+ QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
visibleItems.append(item);
if (++colNum >= columns) {
colNum = 0;
--visibleIndex;
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(colPos, rowPos, true);
- item->item->setVisible(!doBuffer);
+ QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
visibleItems.prepend(item);
if (--colNum < 0) {
colNum = columns-1;
qreal to = d->isContentFlowReversed() ? -d->position() : d->position()+d->size();
for (int i = 0; i < d->visibleItems.count(); ++i) {
FxGridItemSG *item = static_cast<FxGridItemSG*>(d->visibleItems.at(i));
- item->item->setVisible(item->rowPos() + d->rowSize() >= from && item->rowPos() <= to);
+ QQuickItemPrivate::get(item->item)->setCulled(item->rowPos() + d->rowSize() < from || item->rowPos() > to);
}
if (d->currentItem) {
FxGridItemSG *item = static_cast<FxGridItemSG*>(d->currentItem);
- item->item->setVisible(item->rowPos() + d->rowSize() >= from && item->rowPos() <= to);
+ QQuickItemPrivate::get(item->item)->setCulled(item->rowPos() + d->rowSize() < from || item->rowPos() > to);
}
if (d->hData.flicking || d->vData.flicking || d->hData.moving || d->vData.moving)
if (!item)
return false;
- item->item->setVisible(true);
+ QQuickItemPrivate::get(item->item)->setCulled(false);
visibleItems.insert(insertionIdx, item);
if (insertionIdx == 0)
insertResult->changedFirstItem = true;
if (!item)
return false;
- item->item->setVisible(true);
+ QQuickItemPrivate::get(item->item)->setCulled(false);
visibleItems.insert(index, item);
if (index == 0)
insertResult->changedFirstItem = true;
effectiveVisible(true), explicitEnable(true), effectiveEnable(true), polishScheduled(false),
inheritedLayoutMirror(false), effectiveLayoutMirror(false), isMirrorImplicit(true),
inheritMirrorFromParent(false), inheritMirrorFromItem(false),
- isAccessible(false),
+ isAccessible(false), culled(false),
dirtyAttributes(0), nextDirtyItem(0), prevDirtyItem(0),
}
}
+void QQuickItemPrivate::setCulled(bool cull)
+{
+ if (cull == culled)
+ return;
+
+ culled = cull;
+ if ((cull && ++extra->hideRefCount == 1) || (!cull && --extra->hideRefCount == 0))
+ dirty(HideReference);
+}
+
void QQuickItemPrivate::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
{
Q_Q(QQuickItem);
bool inheritMirrorFromParent:1;
bool inheritMirrorFromItem:1;
bool isAccessible:1;
- // bool dummy:3
+ bool culled:1;
+ // bool dummy:2
// Bit 32
enum DirtyType {
QQuickItem *nextDirtyItem;
QQuickItem**prevDirtyItem;
+ void setCulled(bool);
+
QQuickCanvas *canvas;
int canvasRefCount;
inline QSGContext *sceneGraphContext() const;
{
if (!visible && transitionableItem && transitionableItem->transitionScheduledOrRunning())
return;
- item->setVisible(visible);
+ QQuickItemPrivate::get(item)->setCulled(!visible);
}
QQuickItemViewTransitioner::TransitionType FxViewItem::scheduledTransitionType() const
, fillCacheBuffer(false), inRequest(false), requestedAsync(false)
, runDelayedRemoveTransition(false)
{
+ bufferPause.addAnimationChangeListener(this, QAbstractAnimationJob::Completion);
+ bufferPause.setLoopCount(1);
+ bufferPause.setDuration(16);
}
QQuickItemViewPrivate::~QQuickItemViewPrivate()
emit q->effectiveLayoutDirectionChanged();
}
+void QQuickItemViewPrivate::animationFinished(QAbstractAnimationJob *)
+{
+ Q_Q(QQuickItemView);
+ fillCacheBuffer = true;
+ q->polish();
+}
+
void QQuickItemViewPrivate::refill()
{
qreal s = qMax(size(), qreal(0.));
if (!isValid() || !q->isComponentComplete())
return;
+ bufferPause.stop();
currentChanges.reset();
int prevCount = itemCount;
if (added) {
// We've already created a new delegate this frame.
// Just schedule a buffer refill.
- fillCacheBuffer = true;
- q->polish();
+ bufferPause.start();
} else {
if (bufferMode & BufferAfter)
fillTo = bufferTo;
if (d->requestedIndex != index) {
item->setParentItem(contentItem());
d->unrequestedItems.insert(item, index);
- item->setVisible(false);
+ QQuickItemPrivate::get(item)->setCulled(true);
d->repositionPackageItemAt(item, index);
} else {
d->requestedIndex = -1;
item->setZ(1);
if (d->requestedIndex == index) {
if (d->requestedAsync)
- item->setVisible(false);
- item->setParentItem(contentItem());
+ QQuickItemPrivate::get(item)->setCulled(true);
d->requestedItem = d->newViewItem(index, item);
}
}
QQuickVisualModel::ReleaseFlags flags = model->release(item->item);
if (flags == 0) {
// item was not destroyed, and we no longer reference it.
- item->item->setVisible(false);
+ QQuickItemPrivate::get(item->item)->setCulled(true);
unrequestedItems.insert(item->item, model->indexOf(item->item, q));
}
delete item;
};
-class QQuickItemViewPrivate : public QQuickFlickablePrivate, public QQuickItemViewTransitionChangeListener
+class QQuickItemViewPrivate : public QQuickFlickablePrivate, public QQuickItemViewTransitionChangeListener, public QAnimationJobChangeListener
{
Q_DECLARE_PUBLIC(QQuickItemView)
public:
void regenerate();
void layout();
+ virtual void animationFinished(QAbstractAnimationJob *);
void refill();
void refill(qreal from, qreal to);
void mirrorChange();
FxViewItem *requestedItem;
QQuickItemViewChangeSet currentChanges;
QQuickItemViewChangeSet bufferedChanges;
+ QPauseAnimationJob bufferPause;
QQmlComponent *highlightComponent;
FxViewItem *highlight;
qreal pos = itemEnd;
while (modelIndex < model->count() && pos <= fillTo) {
#ifdef DEBUG_DELEGATE_LIFECYCLE
- qDebug() << "refill: append item" << modelIndex << "pos" << pos;
+ qDebug() << "refill: append item" << modelIndex << "pos" << pos << "buffer" << doBuffer;
#endif
if (!(item = static_cast<FxListItemSG*>(createItem(modelIndex, doBuffer))))
break;
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(pos, true);
- item->item->setVisible(!doBuffer);
+ QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
pos += item->size() + spacing;
visibleItems.append(item);
++modelIndex;
while (visibleIndex > 0 && visibleIndex <= model->count() && visiblePos > fillFrom) {
#ifdef DEBUG_DELEGATE_LIFECYCLE
- qDebug() << "refill: prepend item" << visibleIndex-1 << "current top pos" << visiblePos;
+ qDebug() << "refill: prepend item" << visibleIndex-1 << "current top pos" << visiblePos << "buffer" << doBuffer;
#endif
if (!(item = static_cast<FxListItemSG*>(createItem(visibleIndex-1, doBuffer))))
break;
visiblePos -= item->size() + spacing;
if (!transitioner || !transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) // pos will be set by layoutVisibleItems()
item->setPosition(visiblePos, true);
- item->item->setVisible(!doBuffer);
+ QQuickItemPrivate::get(item->item)->setCulled(doBuffer);
visibleItems.prepend(item);
changed = true;
}
bool fixedCurrent = currentItem && firstItem->item == currentItem->item;
qreal sum = firstItem->size();
qreal pos = firstItem->position() + firstItem->size() + spacing;
- firstItem->item->setVisible(firstItem->endPosition() >= from && firstItem->position() <= to);
+ firstItem->setVisible(firstItem->endPosition() >= from && firstItem->position() <= to);
for (int i=1; i < visibleItems.count(); ++i) {
FxListItemSG *item = static_cast<FxListItemSG*>(visibleItems.at(i));
qreal to = d->isContentFlowReversed() ? -d->position() : d->position()+d->size();
for (int i = 0; i < d->visibleItems.count(); ++i) {
FxViewItem *item = static_cast<FxListItemSG*>(d->visibleItems.at(i));
- item->item->setVisible(item->endPosition() >= from && item->position() <= to);
+ QQuickItemPrivate::get(item->item)->setCulled(item->endPosition() < from || item->position() > to);
}
if (d->currentItem)
- d->currentItem->item->setVisible(d->currentItem->endPosition() >= from && d->currentItem->position() <= to);
+ QQuickItemPrivate::get(d->currentItem->item)->setCulled(d->currentItem->endPosition() < from || d->currentItem->position() > to);
if (d->hData.flicking || d->vData.flicking || d->hData.moving || d->vData.moving)
d->moveReason = QQuickListViewPrivate::Mouse;
int firstVisibleIndex = -1;
for (int i=0; i<items.count(); i++) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
- if (item && item->isVisible()) {
+ if (item && delegateVisible(item)) {
firstVisibleIndex = i;
break;
}
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
if (item) {
QRectF itemRect(item->x(), item->y(), item->width(), item->height());
- if (item->isVisible() && viewRect.intersects(itemRect)) {
+ if (delegateVisible(item) && viewRect.intersects(itemRect)) {
firstVisibleIndex = i;
QQmlExpression en(qmlContext(item), item, "name");
firstName = en.evaluate().toString();
int firstVisibleIndex = -1;
for (int i=0; i<items.count(); i++) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
- if (item && item->isVisible()) {
+ if (item && delegateVisible(item)) {
firstVisibleIndex = i;
break;
}
// moving currentItem out of view should make it invisible
gridview->setCurrentIndex(0);
- QTRY_VERIFY(gridview->currentItem()->isVisible());
+ QTRY_VERIFY(delegateVisible(gridview->currentItem()));
gridview->setContentY(200);
- QTRY_VERIFY(!gridview->currentItem()->isVisible());
+ QTRY_VERIFY(!delegateVisible(gridview->currentItem()));
delete canvas;
}
QTRY_VERIFY(item);
QTRY_COMPARE(item->x(), qreal((i%3)*80));
QTRY_COMPARE(item->y(), qreal((i/3)*60));
- QCOMPARE(item->isVisible(), i < 9); // inside view visible, outside not visible
+ QCOMPARE(delegateVisible(item), i < 9); // inside view visible, outside not visible
}
// ensure items outside view become invisible
QTRY_VERIFY(item);
QTRY_COMPARE(item->x(), qreal((i%3)*80));
QTRY_COMPARE(item->y(), qreal((i/3)*60));
- QCOMPARE(item->isVisible(), i < 6); // inside view visible, outside not visible
+ QCOMPARE(delegateVisible(item), i < 6); // inside view visible, outside not visible
}
delete canvas;
QQuickItem *item;
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 11));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 11));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 9));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 10));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
rightview->setCurrentIndex(0);
QTRY_COMPARE(rightview->contentY(), 0.0);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QTRY_COMPARE(item->isVisible(), true);
+ QTRY_COMPARE(delegateVisible(item), true);
QVERIFY(!findItem<QQuickItem>(leftContent, "wrapper", 11));
QVERIFY(!findItem<QQuickItem>(rightContent, "wrapper", 11));
QTRY_COMPARE(rightview->contentY(), 0.0);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QTRY_COMPARE(item->isVisible(), false);
+ QTRY_COMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 11));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 11));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 9));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 10));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
// move a non-visible item into view
model.moveItems(10, 9, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QTRY_VERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 11));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 11));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 9));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 10));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
// move a visible item out of view
model.moveItems(5, 3, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 9));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 10));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
// move a non-visible item into view
model.moveItems(3, 5, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 9));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 10));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
// move a visible item out of view
model.moveItems(9, 10, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 9));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 10));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
// move a non-visible item into view
model.moveItems(10, 9, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 9));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 10));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
delete canvas;
}
int firstVisibleIndex = -1;
for (int i=0; i<items.count(); i++) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
- if (item && item->isVisible()) {
+ if (item && !QQuickItemPrivate::get(item)->culled) {
firstVisibleIndex = i;
break;
}
int firstVisibleIndex = -1;
for (int i=0; i<items.count(); i++) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
- if (item && item->isVisible()) {
+ if (item && delegateVisible(item)) {
firstVisibleIndex = i;
break;
}
int firstVisibleIndex = -1;
for (int i=0; i<items.count(); i++) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
- if (item && item->isVisible()) {
+ if (item && delegateVisible(item)) {
firstVisibleIndex = i;
break;
}
// moving currentItem out of view should make it invisible
listview->setCurrentIndex(0);
- QTRY_VERIFY(listview->currentItem()->isVisible());
+ QTRY_VERIFY(delegateVisible(listview->currentItem()));
listview->setContentY(200);
- QTRY_VERIFY(!listview->currentItem()->isVisible());
+ QTRY_VERIFY(!delegateVisible(listview->currentItem()));
delete canvas;
}
QQuickItem *item;
QVERIFY(item = findItem<QQuickItem>(contentItem, "item1"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
QVERIFY(item = findItem<QQuickItem>(contentItem, "item2"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
QVERIFY(item = findItem<QQuickItem>(contentItem, "item3"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
listview->setCurrentIndex(1);
QVERIFY(item = findItem<QQuickItem>(contentItem, "item1"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
QVERIFY(item = findItem<QQuickItem>(contentItem, "item2"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
QVERIFY(item = findItem<QQuickItem>(contentItem, "item3"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
listview->setCurrentIndex(2);
QVERIFY(item = findItem<QQuickItem>(contentItem, "item1"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
QVERIFY(item = findItem<QQuickItem>(contentItem, "item2"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
QVERIFY(item = findItem<QQuickItem>(contentItem, "item3"));
- QVERIFY(item->isVisible());
+ QVERIFY(delegateVisible(item));
delete canvas;
}
if (!item) qWarning() << "Item" << i << "not found";
QTRY_VERIFY(item);
QTRY_COMPARE(item->y(), i*20.);
- QCOMPARE(item->isVisible(), i < 11); // inside view visible, outside not visible
+ QCOMPARE(delegateVisible(item), i < 11); // inside view visible, outside not visible
}
// ensure items outside view become invisible
if (!item) qWarning() << "Item" << i << "not found";
QTRY_VERIFY(item);
QTRY_COMPARE(item->y(), i*20.);
- QCOMPARE(item->isVisible(), i < 6); // inside view visible, outside not visible
+ QCOMPARE(delegateVisible(item), i < 6); // inside view visible, outside not visible
}
delete canvas;
QQuickItem *item;
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 19));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 19));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 16));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 17));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
rightview->setCurrentIndex(0);
QTRY_COMPARE(rightview->contentY(), 0.0);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QTRY_COMPARE(item->isVisible(), true);
+ QTRY_COMPARE(delegateVisible(item), true);
QVERIFY(!findItem<QQuickItem>(leftContent, "wrapper", 19));
QVERIFY(!findItem<QQuickItem>(rightContent, "wrapper", 19));
QTRY_COMPARE(rightview->contentY(), 0.0);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QTRY_COMPARE(item->isVisible(), false);
+ QTRY_COMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 19));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 19));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 3));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 16));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 17));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
model.moveItems(19, 1, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QTRY_VERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 1));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 19));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 19));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 16));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 17));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
model.moveItems(3, 4, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 16));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 17));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
model.moveItems(4, 3, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 16));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 17));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
model.moveItems(16, 17, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 16));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 17));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
model.moveItems(17, 16, 1);
QTRY_COMPARE(QQuickItemPrivate::get(leftview)->polishScheduled, false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 4));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
QVERIFY(item = findItem<QQuickItem>(leftContent, "wrapper", 5));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 16));
- QCOMPARE(item->isVisible(), true);
+ QCOMPARE(delegateVisible(item), true);
QVERIFY(item = findItem<QQuickItem>(rightContent, "wrapper", 17));
- QCOMPARE(item->isVisible(), false);
+ QCOMPARE(delegateVisible(item), false);
delete canvas;
}
#include <QtQuick/QQuickItem>
#include <QtCore/QDebug>
+bool QQuickVisualTestUtil::delegateVisible(QQuickItem *item)
+{
+ return item->isVisible() && !QQuickItemPrivate::get(item)->culled;
+}
+
QQuickItem *QQuickVisualTestUtil::findVisibleChild(QQuickItem *parent, const QString &objectName)
{
QQuickItem *item = 0;
QList<QQuickItem*> items = parent->findChildren<QQuickItem*>(objectName);
for (int i = 0; i < items.count(); ++i) {
- if (items.at(i)->isVisible()) {
+ if (items.at(i)->isVisible() && !QQuickItemPrivate::get(items.at(i))->culled) {
item = items.at(i);
break;
}
void dumpTree(QQuickItem *parent, int depth = 0);
+ bool delegateVisible(QQuickItem *item);
/*
Find an item with the specified objectName. If index is supplied then the
const QMetaObject &mo = T::staticMetaObject;
for (int i = 0; i < parent->childItems().count(); ++i) {
QQuickItem *item = qobject_cast<QQuickItem*>(parent->childItems().at(i));
- if (!item || (visibleOnly && !item->isVisible()))
+ if (!item || (visibleOnly && (!item->isVisible() || QQuickItemPrivate::get(item)->culled)))
continue;
if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName))
items.append(static_cast<T*>(item));