summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-04-04 13:10:26 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-04-04 13:10:26 +0200
commit974b53f9df94d70a7f04080e181704111c2f294a (patch)
treeb00ef03954103f40e93425e482140a198a996d79
parentf11bb429d17b27fb29ff068626c76e8346ac71d2 (diff)
downloadkube-974b53f9df94d70a7f04080e181704111c2f294a.tar.gz
kube-974b53f9df94d70a7f04080e181704111c2f294a.zip
Scroll via scroll helper.
This helps so we have aproximately uniform movements.
-rw-r--r--framework/qml/ConversationListView.qml27
-rw-r--r--framework/qml/ScrollHelper.qml36
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: {