From 9cb4ad61ee401352c89c9b97ffadf16fb4a7a12e Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jun 2019 15:06:20 -0700 Subject: [PATCH] BUGZ-699: Make PSFListModel fetch early when making container bigger --- .../qml/hifi/models/PSFListModel.qml | 40 ++++++++++++------- interface/resources/qml/hifi/models/qmldir | 3 ++ 2 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 interface/resources/qml/hifi/models/qmldir diff --git a/interface/resources/qml/hifi/models/PSFListModel.qml b/interface/resources/qml/hifi/models/PSFListModel.qml index b9006bc57c..6dce3f185e 100644 --- a/interface/resources/qml/hifi/models/PSFListModel.qml +++ b/interface/resources/qml/hifi/models/PSFListModel.qml @@ -75,21 +75,31 @@ ListModel { // 1: equivalent to paging when reaching end (and not before). // 0: don't getNextPage on scroll at all here. The application code will do it. property real pageAhead: 2.0; - function needsEarlyYFetch() { - return flickable - && !flickable.atYBeginning - && (flickable.contentY - flickable.originY) >= (flickable.contentHeight - (pageAhead * flickable.height)); + function onContentXChanged() { + if (flickable && + !flickable.atXBeginning && + (flickable.contentX - flickable.originX) >= (flickable.contentWidth - (pageAhead * flickable.width))) { + getNextPage(); + } } - function needsEarlyXFetch() { - return flickable - && !flickable.atXBeginning - && (flickable.contentX - flickable.originX) >= (flickable.contentWidth - (pageAhead * flickable.width)); + function onContentYChanged() { + if (flickable && + !flickable.atYBeginning && + (flickable.contentY - flickable.originY) >= (flickable.contentHeight - (pageAhead * flickable.height))) { + getNextPage(); + } } - function getNextPageIfHorizontalScroll() { - if (needsEarlyXFetch()) { getNextPage(); } + function onWidthChanged() { + if (flickable && + (flickable.contentX - flickable.originX) >= (flickable.contentWidth - (pageAhead * flickable.width))) { + getNextPage(); + } } - function getNextPageIfVerticalScroll() { - if (needsEarlyYFetch()) { getNextPage(); } + function onHeightChanged() { + if (flickable && + (flickable.contentY - flickable.originY) >= (flickable.contentHeight - (pageAhead * flickable.height))) { + getNextPage(); + } } function needsMoreHorizontalResults() { return flickable @@ -118,8 +128,10 @@ ListModel { initialized = true; if (flickable && pageAhead > 0.0) { // Pun: Scrollers are usually one direction or another, such that only one of the following will actually fire. - flickable.contentXChanged.connect(getNextPageIfHorizontalScroll); - flickable.contentYChanged.connect(getNextPageIfVerticalScroll); + flickable.contentXChanged.connect(onContentXChanged); + flickable.contentYChanged.connect(onContentYChanged); + flickable.widthChanged.connect(onWidthChanged); + flickable.heightChanged.connect(onHeightChanged); flickable.contentWidthChanged.connect(getNextPageIfNotEnoughHorizontalResults); flickable.contentHeightChanged.connect(getNextPageIfNotEnoughVerticalResults); } diff --git a/interface/resources/qml/hifi/models/qmldir b/interface/resources/qml/hifi/models/qmldir new file mode 100644 index 0000000000..d4c78941e7 --- /dev/null +++ b/interface/resources/qml/hifi/models/qmldir @@ -0,0 +1,3 @@ +module hifiModels +PSFListModel 1.0 PSFListModel.qml +S3Model 1.0 S3Model.qml