virtual bool isContentFlowReversed() const;
bool isRightToLeftTopToBottom() const;
- virtual qreal startPosition() const;
virtual qreal positionAt(int index) const;
- virtual qreal endPosition() const;
virtual qreal endPositionAt(int index) const;
+ virtual qreal originPosition() const;
virtual qreal lastPosition() const;
- qreal originPosition() const;
int rowSize() const;
int colSize() const;
qreal colPosAt(int modelIndex) const;
qreal QSGGridViewPrivate::lastPosition() const
{
qreal pos = 0;
- if (model && model->count())
- pos = rowPosAt(model->count() - 1) + rowSize();
+ if (model && model->count()) {
+ // get end position of last item
+ // endPosition() of items calculate -1 to get last edge pixel, so do that here as well
+ pos = (rowPosAt(model->count() - 1) + rowSize()) - 1;
+ }
return pos;
}
-qreal QSGGridViewPrivate::startPosition() const
-{
- return isRightToLeftTopToBottom() ? -lastPosition()+1 : originPosition();
-}
-
qreal QSGGridViewPrivate::positionAt(int index) const
{
return rowPosAt(index);
}
-qreal QSGGridViewPrivate::endPosition() const
-{
- return isRightToLeftTopToBottom() ? -originPosition()+1 : lastPosition();
-
-}
-
qreal QSGGridViewPrivate::endPositionAt(int index) const
{
return rowPosAt(index) + rowSize();
void QSGGridViewPrivate::visibleItemsChanged()
{
- Q_Q(QSGGridView);
-
updateHeader();
updateFooter();
updateViewport();
colOffset = gridItem->item->width()-cellWidth;
}
if (visibleItems.count()) {
- qreal endPos = lastPosition();
+ qreal endPos = lastPosition() + 1;
if (findLastVisibleIndex() == model->count()-1) {
gridItem->setPosition(colOffset, endPos + rowOffset);
} else {
return layoutOrientation() == Qt::Vertical ? q->height() : q->width();
}
+qreal QSGItemViewPrivate::startPosition() const
+{
+ return isContentFlowReversed() ? -lastPosition()-1 : originPosition();
+}
+
+qreal QSGItemViewPrivate::endPosition() const
+{
+ return isContentFlowReversed() ? -originPosition()-1 : lastPosition();
+}
+
int QSGItemViewPrivate::findLastVisibleIndex(int defaultValue) const
{
if (visibleItems.count()) {
bool isValid() const;
qreal position() const;
qreal size() const;
+ qreal startPosition() const;
+ qreal endPosition() const;
int findLastVisibleIndex(int defaultValue = -1) const;
FxViewItem *visibleItem(int modelIndex) const;
FxViewItem *firstVisibleItem() const;
virtual Qt::Orientation layoutOrientation() const = 0;
virtual bool isContentFlowReversed() const = 0;
- virtual qreal startPosition() const = 0;
virtual qreal positionAt(int index) const = 0;
- virtual qreal endPosition() const = 0;
virtual qreal endPositionAt(int index) const = 0;
- virtual qreal lastPosition() const = 0;
+ virtual qreal originPosition() const = 0;
+ virtual qreal lastPosition() const = 0;
virtual qreal headerSize() const = 0;
virtual qreal footerSize() const = 0;
virtual bool isContentFlowReversed() const;
bool isRightToLeft() const;
- virtual qreal startPosition() const;
virtual qreal positionAt(int index) const;
- virtual qreal endPosition() const;
virtual qreal endPositionAt(int index) const;
+ virtual qreal originPosition() const;
virtual qreal lastPosition() const;
- qreal originPosition() const;
FxViewItem *nextVisibleItem() const;
FxViewItem *itemBefore(int modelIndex) const;
QString sectionAt(int modelIndex);
}
pos = (*(--visibleItems.constEnd()))->endPosition() + invisibleCount * (averageSize + spacing);
} else if (model && model->count()) {
- pos = model->count() * averageSize + (model->count()-1) * spacing;
+ // endPosition() of items calculate -1 to get last edge pixel, so do that here as well
+ pos = (model->count() * averageSize + (model->count()-1) * spacing) - 1;
}
return pos;
}
-qreal QSGListViewPrivate::startPosition() const
-{
- return isRightToLeft() ? -lastPosition()-1 : originPosition();
-}
-
-qreal QSGListViewPrivate::endPosition() const
-{
- return isRightToLeft() ? -originPosition()-1 : lastPosition();
-}
-
qreal QSGListViewPrivate::positionAt(int modelIndex) const
{
if (FxViewItem *item = visibleItem(modelIndex))
// Position on an item that would leave empty space if positioned at the top
gridview->positionViewAtIndex(31, QSGGridView::Beginning);
QTRY_COMPARE(gridview->indexAt(120, 630), 31);
- QTRY_COMPARE(gridview->contentY(), 521.); // 520 then +1 so bottom edge of last item is visible
+ QTRY_COMPARE(gridview->contentY(), 520.);
// Confirm items positioned correctly
itemCount = findItems<QSGItem>(contentItem, "wrapper").count();
// Position on an item that would leave empty space if positioned at the top
gridview->positionViewAtIndex(31, QSGGridView::Beginning);
- QTRY_COMPARE(gridview->contentX(), -639.);
+ QTRY_COMPARE(gridview->contentX(), -640.);
// Confirm items positioned correctly
itemCount = findItems<QSGItem>(contentItem, "wrapper").count();