Skip to content

Commit

Permalink
fix(android): correct contentOffset units
Browse files Browse the repository at this point in the history
  • Loading branch information
garymathews authored and sgtcoolguy committed May 27, 2021
1 parent d527d0f commit 906b6aa
Showing 1 changed file with 37 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class TiUIScrollView extends TiUIView
private static final String TAG = "TiUIScrollView";

private View scrollView;
private int offsetX = 0, offsetY = 0;
private TiDimension offsetX, offsetY;
private boolean setInitialOffset = false;
private boolean mScrollingEnabled = true;
private boolean isScrolling = false;
Expand Down Expand Up @@ -459,7 +459,7 @@ public void onDraw(Canvas canvas)
super.onDraw(canvas);
// setting offset once when this view is visible
if (!setInitialOffset) {
scrollTo(offsetX, offsetY);
scrollTo(offsetX.getAsPixels(scrollView), offsetY.getAsPixels(scrollView));
setInitialOffset = true;
}
}
Expand All @@ -474,11 +474,13 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt)
getProxy().fireEvent(TiC.EVENT_DRAGSTART, data);
}

setContentOffset(l, t);

KrollDict data = new KrollDict();
data.put(TiC.EVENT_PROPERTY_X, l);
data.put(TiC.EVENT_PROPERTY_Y, t);
data.put(TiC.EVENT_PROPERTY_X, offsetX.getAsDefault(scrollView));
data.put(TiC.EVENT_PROPERTY_Y, offsetY.getAsDefault(scrollView));
data.put(TiC.PROPERTY_CONTENT_SIZE, contentSize());
setContentOffset(l, t);

getProxy().fireEvent(TiC.EVENT_SCROLL, data);
}

Expand Down Expand Up @@ -584,7 +586,7 @@ public void onDraw(Canvas canvas)
super.onDraw(canvas);
// setting offset once this view is visible
if (!setInitialOffset) {
scrollTo(offsetX, offsetY);
scrollTo(offsetX.getAsPixels(scrollView), offsetY.getAsPixels(scrollView));
setInitialOffset = true;
}
}
Expand All @@ -600,11 +602,13 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt)
getProxy().fireEvent(TiC.EVENT_DRAGSTART, data);
}

setContentOffset(l, t);

data = new KrollDict();
data.put(TiC.EVENT_PROPERTY_X, l);
data.put(TiC.EVENT_PROPERTY_Y, t);
data.put(TiC.EVENT_PROPERTY_X, offsetX.getAsDefault(scrollView));
data.put(TiC.EVENT_PROPERTY_Y, offsetY.getAsDefault(scrollView));
data.put(TiC.PROPERTY_CONTENT_SIZE, contentSize());
setContentOffset(l, t);

getProxy().fireEvent(TiC.EVENT_SCROLL, data);
}

Expand Down Expand Up @@ -683,22 +687,38 @@ public void release()
super.release();
}

/**
* Set content offset from pixels.
*
* @param x x-offset in pixels.
* @param y y-offset in pixels.
*/
public void setContentOffset(int x, int y)
{
KrollDict offset = new KrollDict();
offsetX = x;
offsetY = y;
offset.put(TiC.EVENT_PROPERTY_X, offsetX);
offset.put(TiC.EVENT_PROPERTY_Y, offsetY);
offsetX = new TiDimension(x, TiDimension.TYPE_LEFT);
offsetY = new TiDimension(y, TiDimension.TYPE_TOP);
offset.put(TiC.EVENT_PROPERTY_X, offsetX.getAsDefault(scrollView));
offset.put(TiC.EVENT_PROPERTY_Y, offsetY.getAsDefault(scrollView));
getProxy().setProperty(TiC.PROPERTY_CONTENT_OFFSET, offset);
}

/**
* Set content offset from dictionary.
*
* @param hashMap Dictionary containing x and y offsets.
*/
public void setContentOffset(Object hashMap)
{
if (hashMap instanceof HashMap) {
HashMap contentOffset = (HashMap) hashMap;
offsetX = TiConvert.toInt(contentOffset, TiC.PROPERTY_X);
offsetY = TiConvert.toInt(contentOffset, TiC.PROPERTY_Y);
KrollDict contentOffset = new KrollDict((HashMap) hashMap);

if (contentOffset.containsKeyAndNotNull(TiC.PROPERTY_X)) {
offsetX = TiConvert.toTiDimension(contentOffset, TiC.PROPERTY_X, TiDimension.TYPE_LEFT);
}
if (contentOffset.containsKeyAndNotNull(TiC.PROPERTY_Y)) {
offsetY = TiConvert.toTiDimension(contentOffset, TiC.PROPERTY_Y, TiDimension.TYPE_TOP);
}
} else {
Log.e(TAG, "ContentOffset must be an instance of HashMap");
}
Expand All @@ -713,7 +733,7 @@ public void propertyChanged(String key, Object oldValue, Object newValue, KrollP

if (key.equals(TiC.PROPERTY_CONTENT_OFFSET)) {
setContentOffset(newValue);
scrollTo(offsetX, offsetY, false);
scrollTo((int) offsetX.getAsDefault(scrollView), (int) offsetY.getAsDefault(scrollView), false);
} else if (key.equals(TiC.PROPERTY_CAN_CANCEL_EVENTS)) {
View view = this.scrollView;
boolean canCancelEvents = TiConvert.toBoolean(newValue);
Expand Down

0 comments on commit 906b6aa

Please sign in to comment.