@@ -46,13 +46,14 @@ Item {
47 function addScrollOffset(scrollAmmout) {
47 function addScrollOffset(scrollAmmout) {
48 if (scrollAmmout < 0) { // left scroll
48 if (scrollAmmout < 0) { // left scroll
49− if (flickable.contentX < 0) return; // already off the left.
50− if (flickable.contentX + scrollAmmout < 0) scrollAmmout = -flickable.contentX; // going to be off the left
51− } else { // right scroll
52− if (flickable.contentX + flickable.width > row.width) return; // already off the right.
49+ if (flickable.contentX + flickable.width > row.width) return; // already off the left.
53− if (flickable.contentX + flickable.width + scrollAmmout > row.width) { // going to be off the right
51+ if (flickable.contentX + flickable.width - scrollAmmout > row.width) { // going to be off the right
54− scrollAmmout = row.width - (flickable.contentX + flickable.width);
52+ scrollAmmout = (flickable.contentX + flickable.width) - row.width;
54+ } else { // right scroll
55+ if (flickable.contentX < 0) return; // already off the right.
56+ if (flickable.contentX - scrollAmmout < 0) scrollAmmout = flickable.contentX; // going to be off the right
57 d.scrollOffset = d.scrollOffset + scrollAmmout;
58 d.scrollOffset = d.scrollOffset + scrollAmmout;
@@ -91,24 +92,26 @@ Item {
91 flickable.resetContentXComponents();
92 flickable.resetContentXComponents();
93 if (expanded && !flickable.moving) {
94 if (expanded && !flickable.moving) {
95 // gap between left and row?
95 // gap between left and row?
96− if (flickable.contentX < 0) {
96+ if (flickable.contentX + flickable.width > row.width) {
97− d.alignmentAdjustment += flickable.contentX;
98− // gap between right and row?
99− } else if (flickable.contentX + flickable.width > row.width) {
100 // row width is less than flickable
97 // row width is less than flickable
101 if (row.width < flickable.width) {
98 if (row.width < flickable.width) {
102− d.alignmentAdjustment += flickable.contentX;
99+ d.alignmentAdjustment -= flickable.contentX;
104− d.alignmentAdjustment += ((flickable.contentX + flickable.width) - row.width);
101+ d.alignmentAdjustment -= ((flickable.contentX + flickable.width) - row.width);
104+ // gap between right and row?
105+ } else if (flickable.contentX < 0) {
106+ d.alignmentAdjustment -= flickable.contentX;
106 // current item overlap on left
108 // current item overlap on left
107− } else if (row.currentItem && row.currentItem.x < flickable.contentX) {
109+ } else if (row.currentItem && (flickable.contentX + flickable.width) < (row.width - row.currentItem.x)) {
108− d.alignmentAdjustment -= (row.currentItem.x - flickable.contentX);
110+ d.alignmentAdjustment += ((row.width - row.currentItem.x) - (flickable.contentX + flickable.width));
109 // current item overlap on right
112 // current item overlap on right
110− } else if (row.currentItem && row.currentItem.x + row.currentItem.width > flickable.contentX + flickable.width) {
113+ } else if (row.currentItem && flickable.contentX > (row.width - row.currentItem.x - row.currentItem.width)) {
111− d.alignmentAdjustment -= ((row.currentItem.x + row.currentItem.width) - (flickable.contentX + flickable.width));
114+ d.alignmentAdjustment -= flickable.contentX - (row.width - row.currentItem.x - row.currentItem.width);
@@ -134,16 +137,19 @@ Item {
134 id: flickable
137 id: flickable
135 objectName: "flickable"
138 objectName: "flickable"
140+ // we rotate it because we want the Flickable to align its content item
141+ // on the right instead of on the left
137 anchors.fill: parent
144 anchors.fill: parent
138 contentWidth: row.width
145 contentWidth: row.width
146+ contentX: d.combinedOffset
139 interactive: false
147 interactive: false
140− // align right + offset from row selection + scrolling
141− contentX: row.width - flickable.width - d.combinedOffset
143 // contentX can change by user interaction as well as user offset changes
149 // contentX can change by user interaction as well as user offset changes
144 // This function re-aligns the offsets so that the offsets match the contentX
150 // This function re-aligns the offsets so that the offsets match the contentX
145 function resetContentXComponents() {
151 function resetContentXComponents() {
146− d.scrollOffset += (flickable.contentX - (row.width - flickable.width - d.combinedOffset));
152+ d.scrollOffset += d.combinedOffset - flickable.contentX;
149 rebound: Transition {
155 rebound: Transition {
@@ -162,6 +168,9 @@ Item {
162 bottom: parent.bottom
168 bottom: parent.bottom
171+ // Compensate for the Flickable rotation (ie, counter-rotate)
165 lateralPosition: {
174 lateralPosition: {
166 if (root.lateralPosition == -1) return -1;
175 if (root.lateralPosition == -1) return -1;