Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fixes bug #1506, Changing orientation on the Android device throws of…
Browse files Browse the repository at this point in the history
…f touch scaling
  • Loading branch information
gabomdq committed Aug 24, 2012
1 parent 78df819 commit 2c91527
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 7 deletions.
20 changes: 15 additions & 5 deletions android-project/src/org/libsdl/app/SDLActivity.java
Expand Up @@ -449,6 +449,9 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
// 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);
Expand All @@ -460,7 +463,11 @@ public SDLSurface(Context context) {
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
Expand Down Expand Up @@ -529,6 +536,9 @@ public void surfaceChanged(SurfaceHolder holder,
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);

Expand Down Expand Up @@ -568,17 +578,17 @@ public boolean onTouch(View v, MotionEvent event) {
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) {
// TODO send motion to every pointer if its position has
// 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);
}
Expand Down
4 changes: 2 additions & 2 deletions src/video/android/SDL_androidtouch.c
Expand Up @@ -55,10 +55,10 @@ void Android_OnTouch(int touch_device_id_in, int pointer_finger_id_in, int actio
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;
Expand Down

0 comments on commit 2c91527

Please sign in to comment.