diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-04-04 13:10:26 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-04-04 13:10:26 +0200 |
commit | 974b53f9df94d70a7f04080e181704111c2f294a (patch) | |
tree | b00ef03954103f40e93425e482140a198a996d79 | |
parent | f11bb429d17b27fb29ff068626c76e8346ac71d2 (diff) | |
download | kube-974b53f9df94d70a7f04080e181704111c2f294a.tar.gz kube-974b53f9df94d70a7f04080e181704111c2f294a.zip |
Scroll via scroll helper.
This helps so we have aproximately uniform movements.
-rw-r--r-- | framework/qml/ConversationListView.qml | 27 | ||||
-rw-r--r-- | framework/qml/ScrollHelper.qml | 36 |
2 files changed, 44 insertions, 19 deletions
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 { | |||
68 | flickable.decrementCurrentIndex() | 68 | flickable.decrementCurrentIndex() |
69 | } | 69 | } |
70 | 70 | ||
71 | function scrollDown() { | ||
72 | scrollHelper.scrollDown() | ||
73 | } | ||
74 | |||
75 | function scrollUp() { | ||
76 | scrollHelper.scrollUp() | ||
77 | } | ||
78 | |||
71 | Flickable { | 79 | Flickable { |
72 | id: flickable | 80 | id: flickable |
73 | anchors.fill: parent | 81 | anchors.fill: parent |
@@ -81,14 +89,17 @@ FocusScope { | |||
81 | function scrollToIndex(index) { | 89 | function scrollToIndex(index) { |
82 | var item = repeater.itemAt(index) | 90 | var item = repeater.itemAt(index) |
83 | if (item) { | 91 | if (item) { |
84 | var pos = item.y | 92 | scrollToPos(item.y) |
85 | var scrollToEndPos = (flickable.contentHeight - flickable.height) | 93 | } |
86 | //Avoid scrolling past the end | 94 | } |
87 | if (pos < scrollToEndPos) { | 95 | |
88 | flickable.contentY = pos | 96 | function scrollToPos(pos) { |
89 | } else { | 97 | var scrollToEndPos = (flickable.contentHeight - flickable.height) |
90 | flickable.contentY = scrollToEndPos | 98 | //Avoid scrolling past the end |
91 | } | 99 | if (pos < scrollToEndPos) { |
100 | flickable.contentY = pos | ||
101 | } else { | ||
102 | flickable.contentY = scrollToEndPos | ||
92 | } | 103 | } |
93 | } | 104 | } |
94 | 105 | ||
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 { | |||
43 | root.parent = flickable | 43 | root.parent = flickable |
44 | } | 44 | } |
45 | 45 | ||
46 | function scrollByPixelDelta(flickableItem, pixelDelta) { | ||
47 | if (!pixelDelta) { | ||
48 | return flickableItem.contentY; | ||
49 | } | ||
50 | |||
51 | var minYExtent = flickableItem.originY + flickableItem.topMargin; | ||
52 | var maxYExtent = (flickableItem.contentHeight + flickableItem.bottomMargin + flickableItem.originY) - flickableItem.height; | ||
53 | |||
54 | if (typeof(flickableItem.headerItem) !== "undefined" && flickableItem.headerItem) { | ||
55 | minYExtent += flickableItem.headerItem.height | ||
56 | } | ||
57 | |||
58 | //Avoid overscrolling | ||
59 | return Math.max(minYExtent, Math.min(maxYExtent, flickableItem.contentY - pixelDelta)); | ||
60 | } | ||
61 | |||
46 | function calculateNewPosition(flickableItem, wheel) { | 62 | function calculateNewPosition(flickableItem, wheel) { |
47 | //Nothing to scroll | 63 | //Nothing to scroll |
48 | if (flickableItem.contentHeight < flickableItem.height) { | 64 | if (flickableItem.contentHeight < flickableItem.height) { |
@@ -64,19 +80,17 @@ MouseArea { | |||
64 | pixelDelta = wheel.pixelDelta.y | 80 | pixelDelta = wheel.pixelDelta.y |
65 | } | 81 | } |
66 | 82 | ||
67 | if (!pixelDelta) { | 83 | return scrollByPixelDelta(flickableItem, pixelDelta); |
68 | return flickableItem.contentY; | 84 | } |
69 | } | ||
70 | |||
71 | var minYExtent = flickableItem.originY + flickableItem.topMargin; | ||
72 | var maxYExtent = (flickableItem.contentHeight + flickableItem.bottomMargin + flickableItem.originY) - flickableItem.height; | ||
73 | 85 | ||
74 | if (typeof(flickableItem.headerItem) !== "undefined" && flickableItem.headerItem) { | 86 | function scrollDown() { |
75 | minYExtent += flickableItem.headerItem.height | 87 | flickable.flick(0, 0); |
76 | } | 88 | flickable.contentY = scrollByPixelDelta(flickable, -60); //3 lines * 20 pixels |
89 | } | ||
77 | 90 | ||
78 | //Avoid overscrolling | 91 | function scrollUp() { |
79 | return Math.max(minYExtent, Math.min(maxYExtent, flickableItem.contentY - pixelDelta)); | 92 | flickable.flick(0, 0); |
93 | flickable.contentY = scrollByPixelDelta(flickable, 60); //3 lines * 20 pixels | ||
80 | } | 94 | } |
81 | 95 | ||
82 | onWheel: { | 96 | onWheel: { |