diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java index f432e64f609..f83426bfe06 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java @@ -940,6 +940,12 @@ public TiScrollViewLayout getLayout() return null; } + @Override + public View getNativeContentView() + { + return getLayout(); + } + public void setScrollingEnabled(Object value) { try { diff --git a/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java b/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java index 0c0dcd79e69..e224c2db313 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java +++ b/android/titanium/src/java/org/appcelerator/titanium/proxy/TiViewProxy.java @@ -1276,7 +1276,7 @@ public KrollDict convertPointToView(KrollDict point, TiViewProxy dest) return null; } View nativeView = view.getNativeView(); - View destNativeView = destView.getNativeView(); + View destNativeView = destView.getNativeContentView(); if (nativeView == null || nativeView.getParent() == null) { Log.w(TAG, "convertPointToView: View has not been attached, cannot convert point"); return null; diff --git a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java index f7d88e08a05..07942b7aedd 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java +++ b/android/titanium/src/java/org/appcelerator/titanium/view/TiUIView.java @@ -298,6 +298,20 @@ public LayoutParams getLayoutParams() return layoutParams; } + /** + * Gets the native view's internal content view used to host child views. + * Called by the convertPointToView() method to convert coordinates. + *

+ * Overridden by ScrollView since its content view is typically larger than the parent view. + *

+ * For most other views, this method returns same view as getNativeView() method. + * @return Returns the native content view used to host child views. + */ + public View getNativeContentView() + { + return getNativeView(); + } + /** * @return the Android native view. */ diff --git a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.h b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.h index e512a5cecc0..a3b13f1c159 100644 --- a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.h +++ b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.h @@ -25,6 +25,8 @@ - (void)setValues:(id)object; +- (void)add:(TiPoint *)value; + /** Provides access to point struct. */ diff --git a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.m b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.m index bd1b1172fa9..b913c9b5c46 100644 --- a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.m +++ b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiPoint.m @@ -38,6 +38,19 @@ - (void)setValues:(id)object } } +- (void)add:(TiPoint *)value +{ + if (!value) { + return; + } + + CGPoint offsetPoint = [value point]; + CGPoint newPoint = [self point]; + newPoint.x += offsetPoint.x; + newPoint.y += offsetPoint.y; + [self setPoint:newPoint]; +} + - (void)setPoint:(CGPoint)point_ { xDimension = TiDimensionDip(point_.x); diff --git a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.h b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.h index 32f9ea31275..9c1b5ee2926 100644 --- a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.h +++ b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.h @@ -243,6 +243,7 @@ enum { - (void)setBackgroundGradient:(id)arg; - (TiBlob *)toImage:(id)args; +- (TiPoint *)contentOffset; #pragma mark nonpublic accessors not related to Housecleaning diff --git a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.m b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.m index 5ffed97bb6b..bb5f55b94bc 100644 --- a/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.m +++ b/iphone/TitaniumKit/TitaniumKit/Sources/API/TiViewProxy.m @@ -737,6 +737,11 @@ - (TiBlob *)toImage:(id)args return blob; } +- (TiPoint *)contentOffset +{ + return [[[TiPoint alloc] initWithPoint:CGPointMake(0, 0)] autorelease]; +} + - (TiPoint *)convertPointToView:(id)args { id arg1 = nil; @@ -765,6 +770,7 @@ - (TiPoint *)convertPointToView:(id)args TiPoint *tiPoint = [[TiPoint alloc] autorelease]; [tiPoint setX:NUMFLOAT(convertDipToDefaultUnit(pointOffsetDips.x + givenPoint.x))]; [tiPoint setY:NUMFLOAT(convertDipToDefaultUnit(pointOffsetDips.y + givenPoint.y))]; + [tiPoint add:[arg2 contentOffset]]; return tiPoint; }