@@ -52,15 +52,21 @@ Item {
5252 }
5353
5454 function addScrollOffset(scrollAmmout) {
55+ if (root.alignment == Qt.AlignLeft) {
56+ scrollAmmout = -scrollAmmout;
57+ }
58+
5559 if (scrollAmmout < 0) { // left scroll
5660 if (flickable.contentX + flickable.width > row.width) return; // already off the left.
5761
58− if (flickable.contentX + flickable.width - scrollAmmout > row.width) { // going to be off the right
62+ if (flickable.contentX + flickable.width - scrollAmmout > row.width) { // going to be off the left
5963 scrollAmmout = (flickable.contentX + flickable.width) - row.width;
6064 }
6165 } else { // right scroll
6266 if (flickable.contentX < 0) return; // already off the right.
63− if (flickable.contentX - scrollAmmout < 0) scrollAmmout = flickable.contentX; // going to be off the right
67+ if (flickable.contentX - scrollAmmout < 0) { // going to be off the right
68+ scrollAmmout = flickable.contentX;
69+ }
6470 }
6571 d.scrollOffset = d.scrollOffset + scrollAmmout;
6672 }
@@ -68,14 +74,19 @@ Item {
6874 QtObject {
6975 id: d
7076 property var initialItem
71− // the non-expanded distance from row offset to center of initial item
72− property real originalDistanceFromRight: -1
77+ // the non-expanded distance from alignment edge to center of initial item
78+ property real originalDistanceFromEdge: -1
7379
74− // calculate the distance from row offset to center of initial item
75− property real distanceFromRight: {
76− if (originalDistanceFromRight == -1) return 0;
80+ // calculate the distance from row alignment edge edge to center of initial item
81+ property real distanceFromEdge: {
82+ if (originalDistanceFromEdge == -1) return 0;
7783 if (!initialItem) return 0;
78− return row.width - initialItem.x - initialItem.width /2;
84+
85+ if (root.alignment == Qt.AlignLeft) {
86+ return initialItem.x - initialItem.width / 2;
87+ } else {
88+ return row.width - initialItem.x - initialItem.width / 2;
89+ }
7990 }
8091
8192 // offset to the intially selected expanded item
@@ -88,7 +99,11 @@ Item {
8899 onScrollOffsetChanged: root.lateralPositionChanged()
89100
90101 onInitialItemChanged: {
91− originalDistanceFromRight = initialItem ? (row.width - initialItem.x - initialItem.width/2) : -1;
102+ if (root.alignment == Qt.AlignLeft) {
103+ originalDistanceFromEdge = initialItem ? (initialItem.x - initialItem.width/2) : -1;
104+ } else {
105+ originalDistanceFromEdge = initialItem ? (row.width - initialItem.x - initialItem.width/2) : -1;
106+ }
92107 }
93108
94109 Behavior on alignmentAdjustment {
@@ -99,26 +114,38 @@ Item {
99114 flickable.resetContentXComponents();
100115
101116 if (expanded && !flickable.moving) {
102− // gap between left and row?
103− if (flickable.contentX + flickable.width > row.width) {
104− // row width is less than flickable
105− if (row.width < flickable.width) {
106− d.alignmentAdjustment -= flickable.contentX;
107− } else {
108− d.alignmentAdjustment -= ((flickable.contentX + flickable.width) - row.width);
109− }
110117
111− // gap between right and row?
112− } else if (flickable.contentX < 0) {
113− d.alignmentAdjustment -= flickable.contentX;
118+ if (root.alignment == Qt.AlignLeft) {
119+ // current item overlap on left
120+ if (row.currentItem && flickable.contentX > row.currentItem.x) {
121+ d.alignmentAdjustment -= (flickable.contentX - row.currentItem.x);
114122
115− // current item overlap on left
116− } else if (row.currentItem && (flickable.contentX + flickable.width) < (row.width - row.currentItem.x)) {
117− d.alignmentAdjustment += ((row.width - row.currentItem.x) - (flickable.contentX + flickable.width));
123+ // current item overlap on right
124+ } else if (row.currentItem && flickable.contentX + flickable.width < row.currentItem.x + row.currentItem.width) {
125+ d.alignmentAdjustment += (row.currentItem.x + row.currentItem.width) - (flickable.contentX + flickable.width);
126+ }
127+ } else {
128+ // gap between left and row?
129+ if (flickable.contentX + flickable.width > row.width) {
130+ // row width is less than flickable
131+ if (row.width < flickable.width) {
132+ d.alignmentAdjustment -= flickable.contentX;
133+ } else {
134+ d.alignmentAdjustment -= ((flickable.contentX + flickable.width) - row.width);
135+ }
136+
137+ // gap between right and row?
138+ } else if (flickable.contentX < 0) {
139+ d.alignmentAdjustment -= flickable.contentX;
118140
119− // current item overlap on right
120− } else if (row.currentItem && flickable.contentX > (row.width - row.currentItem.x - row.currentItem.width)) {
121− d.alignmentAdjustment -= flickable.contentX - (row.width - row.currentItem.x - row.currentItem.width);
141+ // current item overlap on left
142+ } else if (row.currentItem && (flickable.contentX + flickable.width) < (row.width - row.currentItem.x)) {
143+ d.alignmentAdjustment += ((row.width - row.currentItem.x) - (flickable.contentX + flickable.width));
144+
145+ // current item overlap on right
146+ } else if (row.currentItem && flickable.contentX > (row.width - row.currentItem.x - row.currentItem.width)) {
147+ d.alignmentAdjustment -= flickable.contentX - (row.width - row.currentItem.x - row.currentItem.width);
148+ }
122149 }
123150 }
124151 }
@@ -149,7 +176,7 @@ Item {
149176 rotation: root.alignment != Qt.AlignRight ? 0 : 180
150177
151178 anchors.fill: parent
152− contentWidth: row.implicitWidth
179+ contentWidth: row.width
153180 contentX: d.combinedOffset
154181 interactive: false
155182
@@ -236,15 +263,15 @@ Item {
236263 target: d
237264 rowOffset: {
238265 if (!initialItem) return 0;
239− if (distanceFromRight - initialItem.width <= 0) return 0;
266+ if (distanceFromEdge - initialItem.width <= 0) return 0;
240267
241− var rowOffset = distanceFromRight - originalDistanceFromRight;
268+ var rowOffset = distanceFromEdge - originalDistanceFromEdge;
242269 return rowOffset;
243270 }
244271 restoreEntryValues: false
245272 }
246− }
247− , State {
273+ },
274+ State {
248275 name: "interactive"
249276 when: expanded && interactive
250277