Fixes bug #1506, Changing orientation on the Android device throws off touch scaling
--- a/android-project/src/org/libsdl/app/SDLActivity.java Fri Aug 24 11:56:21 2012 -0300
+++ b/android-project/src/org/libsdl/app/SDLActivity.java Fri Aug 24 13:10:29 2012 -0300
@@ -449,6 +449,9 @@
// Sensors
private static SensorManager mSensorManager;
+ // Keep track of the surface size to normalize touch events
+ private static float mWidth, mHeight;
+
// Startup
public SDLSurface(Context context) {
super(context);
@@ -460,7 +463,11 @@
setOnKeyListener(this);
setOnTouchListener(this);
- mSensorManager = (SensorManager)context.getSystemService("sensor");
+ mSensorManager = (SensorManager)context.getSystemService("sensor");
+
+ // Some arbitrary defaults to avoid a potential division by zero
+ mWidth = 1.0f;
+ mHeight = 1.0f;
}
// Called when we have a valid drawing surface
@@ -529,6 +536,9 @@
Log.v("SDL", "pixel format unknown " + format);
break;
}
+
+ mWidth = (float) width;
+ mHeight = (float) height;
SDLActivity.onNativeResize(width, height, sdlFormat);
Log.v("SDL", "Window size:" + width + "x"+height);
@@ -568,8 +578,8 @@
int pointerFingerId = event.getPointerId(actionPointerIndex);
int action = (event.getAction() & MotionEvent.ACTION_MASK); /* API 8: event.getActionMasked(); */
- float x = event.getX(actionPointerIndex);
- float y = event.getY(actionPointerIndex);
+ float x = event.getX(actionPointerIndex) / mWidth;
+ float y = event.getY(actionPointerIndex) / mHeight;
float p = event.getPressure(actionPointerIndex);
if (action == MotionEvent.ACTION_MOVE && pointerCount > 1) {
@@ -577,8 +587,8 @@
// changed since prev event.
for (int i = 0; i < pointerCount; i++) {
pointerFingerId = event.getPointerId(i);
- x = event.getX(i);
- y = event.getY(i);
+ x = event.getX(i) / mWidth;
+ y = event.getY(i) / mHeight;
p = event.getPressure(i);
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
}
--- a/src/video/android/SDL_androidtouch.c Fri Aug 24 11:56:21 2012 -0300
+++ b/src/video/android/SDL_androidtouch.c Fri Aug 24 13:10:29 2012 -0300
@@ -55,10 +55,10 @@
memset( &touch, 0, sizeof(touch) );
touch.id = touchDeviceId;
touch.x_min = 0.0f;
- touch.x_max = (float)Android_ScreenWidth;
+ touch.x_max = 1.0f;
touch.native_xres = touch.x_max - touch.x_min;
touch.y_min = 0.0f;
- touch.y_max = (float)Android_ScreenHeight;
+ touch.y_max = 1.0f;
touch.native_yres = touch.y_max - touch.y_min;
touch.pressure_min = 0.0f;
touch.pressure_max = 1.0f;