@@ -128,23 +128,31 @@ Showable {
128128 rowCoordinates = indicatorRow.mapToItem(indicatorRow.row, xValue, 0);
129129 // get the current delegate
130130 currentItem = indicatorRow.row.childAt(rowCoordinates.x, 0);
131− if (currentItem && currentItem != indicatorRow.currentItem ) {
131+ if (currentItem) {
132132 itemCoordinates = indicatorRow.row.mapToItem(currentItem, rowCoordinates.x, 0);
133133 distanceFromRightEdge = (currentItem.width - itemCoordinates.x) / (currentItem.width);
134− if (Math.abs(currentItem.ownIndex - indicatorRow.currentItemIndex) > 1) {
135− bufferExceeded = true;
136− } else {
137− if (indicatorRow.currentItemIndex < currentItem.ownIndex && distanceFromRightEdge < (1 - effectiveBufferThreshold)) {
138− bufferExceeded = true;
139− } else if (indicatorRow.currentItemIndex > currentItem.ownIndex && distanceFromRightEdge > effectiveBufferThreshold) {
134+ if (currentItem != indicatorRow.currentItem) {
135+ if (Math.abs(currentItem.ownIndex - indicatorRow.currentItemIndex) > 1) {
140136 bufferExceeded = true;
137+ } else {
138+ if (indicatorRow.currentItemIndex < currentItem.ownIndex && distanceFromRightEdge < (1 - effectiveBufferThreshold)) {
139+ bufferExceeded = true;
140+ } else if (indicatorRow.currentItemIndex > currentItem.ownIndex && distanceFromRightEdge > effectiveBufferThreshold) {
141+ bufferExceeded = true;
142+ }
141143 }
144+ if ((!useBuffer || (useBuffer && bufferExceeded)) || indicatorRow.currentItemIndex < 0 || indicatorRow.currentItem == null) {
145+ indicatorRow.currentItem = currentItem;
146+ }
147+
148+ // need to re-init the distanceFromRightEdge for offset calculation
149+ itemCoordinates = indicatorRow.row.mapToItem(indicatorRow.currentItem, rowCoordinates.x, 0);
150+ distanceFromRightEdge = (indicatorRow.currentItem.width - itemCoordinates.x) / (indicatorRow.currentItem.width);
142151 }
143− if ((!useBuffer || (useBuffer && bufferExceeded)) || indicatorRow.currentItem < 0 || indicatorRow.currentItem == null) {
144− indicatorRow.currentItem = currentItem;
145− }
146− } else if (!currentItem) {
152+ indicatorRow.currentItemOffset = 1 - (distanceFromRightEdge * 2);
153+ } else {
147154 indicatorRow.setDefaultItem();
155+ indicatorRow.currentItemOffset = 0;
148156 }
149157 initalizeItem = indicatorRow.currentItem == null;
150158 }