From 974b53f9df94d70a7f04080e181704111c2f294a Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 4 Apr 2018 13:10:26 +0200 Subject: Scroll via scroll helper. This helps so we have aproximately uniform movements. --- framework/qml/ConversationListView.qml | 27 +++++++++++++++++-------- framework/qml/ScrollHelper.qml | 36 +++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 19 deletions(-) (limited to 'framework') diff --git a/framework/qml/ConversationListView.qml b/framework/qml/ConversationListView.qml index 2f5c5c32..a7dc1f7d 100644 --- a/framework/qml/ConversationListView.qml +++ b/framework/qml/ConversationListView.qml @@ -68,6 +68,14 @@ FocusScope { flickable.decrementCurrentIndex() } + function scrollDown() { + scrollHelper.scrollDown() + } + + function scrollUp() { + scrollHelper.scrollUp() + } + Flickable { id: flickable anchors.fill: parent @@ -81,14 +89,17 @@ FocusScope { function scrollToIndex(index) { var item = repeater.itemAt(index) if (item) { - var pos = item.y - var scrollToEndPos = (flickable.contentHeight - flickable.height) - //Avoid scrolling past the end - if (pos < scrollToEndPos) { - flickable.contentY = pos - } else { - flickable.contentY = scrollToEndPos - } + scrollToPos(item.y) + } + } + + function scrollToPos(pos) { + var scrollToEndPos = (flickable.contentHeight - flickable.height) + //Avoid scrolling past the end + if (pos < scrollToEndPos) { + flickable.contentY = pos + } else { + flickable.contentY = scrollToEndPos } } diff --git a/framework/qml/ScrollHelper.qml b/framework/qml/ScrollHelper.qml index 9fe47b6c..add737b4 100644 --- a/framework/qml/ScrollHelper.qml +++ b/framework/qml/ScrollHelper.qml @@ -43,6 +43,22 @@ MouseArea { root.parent = flickable } + function scrollByPixelDelta(flickableItem, pixelDelta) { + if (!pixelDelta) { + return flickableItem.contentY; + } + + var minYExtent = flickableItem.originY + flickableItem.topMargin; + var maxYExtent = (flickableItem.contentHeight + flickableItem.bottomMargin + flickableItem.originY) - flickableItem.height; + + if (typeof(flickableItem.headerItem) !== "undefined" && flickableItem.headerItem) { + minYExtent += flickableItem.headerItem.height + } + + //Avoid overscrolling + return Math.max(minYExtent, Math.min(maxYExtent, flickableItem.contentY - pixelDelta)); + } + function calculateNewPosition(flickableItem, wheel) { //Nothing to scroll if (flickableItem.contentHeight < flickableItem.height) { @@ -64,19 +80,17 @@ MouseArea { pixelDelta = wheel.pixelDelta.y } - if (!pixelDelta) { - return flickableItem.contentY; - } - - var minYExtent = flickableItem.originY + flickableItem.topMargin; - var maxYExtent = (flickableItem.contentHeight + flickableItem.bottomMargin + flickableItem.originY) - flickableItem.height; + return scrollByPixelDelta(flickableItem, pixelDelta); + } - if (typeof(flickableItem.headerItem) !== "undefined" && flickableItem.headerItem) { - minYExtent += flickableItem.headerItem.height - } + function scrollDown() { + flickable.flick(0, 0); + flickable.contentY = scrollByPixelDelta(flickable, -60); //3 lines * 20 pixels + } - //Avoid overscrolling - return Math.max(minYExtent, Math.min(maxYExtent, flickableItem.contentY - pixelDelta)); + function scrollUp() { + flickable.flick(0, 0); + flickable.contentY = scrollByPixelDelta(flickable, 60); //3 lines * 20 pixels } onWheel: { -- cgit v1.2.3