diff options
Diffstat (limited to 'framework/qml/ScrollHelper.qml')
-rw-r--r-- | framework/qml/ScrollHelper.qml | 36 |
1 files changed, 25 insertions, 11 deletions
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: { |