@@ -20,8 +20,9 @@ import Ubuntu.Components 1.3
21 id: scrollArea
21 id: scrollArea
23− readonly property bool areaActive: lateralPosition >= 0
23+ readonly property bool areaActive: lateralPosition >= 0 && progressThreshold * width
24 property real stopScrollThreshold: units.gu(2)
24 property real stopScrollThreshold: units.gu(2)
25+ property real progressThreshold: units.dp(4)
25 property int direction: Qt.LeftToRight
26 property int direction: Qt.LeftToRight
26 property real baseScrollAmount: units.dp(3)
27 property real baseScrollAmount: units.dp(3)
27 property real maximumScrollAmount: units.dp(8)
28 property real maximumScrollAmount: units.dp(8)
@@ -38,6 +39,8 @@ Item {
38 function handleEnter() {
39 function handleEnter() {
39 d.thresholdAreaX = -scrollArea.stopScrollThreshold;
40 d.thresholdAreaX = -scrollArea.stopScrollThreshold;
40 scrollTimer.restart();
41 scrollTimer.restart();
43+ d.passedProgressThreshold = false;
43 function handleExit() {
46 function handleExit() {
@@ -59,6 +62,10 @@ Item {
61 d.progression = lateralPosition / width;
64 d.progression = lateralPosition / width;
66+ d.startingProgression = d.progression;
@@ -68,14 +75,23 @@ Item {
68 repeat: true
75 repeat: true
70 onTriggered: {
77 onTriggered: {
78+ if (d.passedProgressThreshold ||
79+ Math.abs(d.progression - d.startingProgression) * scrollArea.width > scrollArea.progressThreshold) {
80+ d.passedProgressThreshold = true;
71− var scrollAmount = scrollArea.baseScrollAmount + scrollArea.maximumScrollAmount * d.progression;
82+ var scrollAmount = scrollArea.baseScrollAmount + scrollArea.maximumScrollAmount * d.progression;
72− scrollArea.scroll(scrollAmount);
83+ scrollArea.scroll(scrollAmount);
76 QtObject {
88 QtObject {
90+ property real startingProgression: 0
91+ property bool init: true
78 property real progression: 0
93 property real progression: 0
79 property real thresholdAreaX: -scrollArea.stopScrollThreshold
94 property real thresholdAreaX: -scrollArea.stopScrollThreshold
95+ property bool passedProgressThreshold: false