Android: Fixed touch pressure being out of range.
According to the documentation of Android's MotionEvent, the getPressure() may return values higher than 1 on some devices. To prevent passing such values into SDL they are now corrected to 1 in Java before the JNI call (where it is assumed to be correct). Currently SDL only sends SDL_FINGERMOTION events if the touch state (position or pressure) changed. By correcting pressure down to 1 some events may get dropped in the rare case that only the pressure was changed but was out of range and the position did not change.
parent
4f00dda95d
commit
1968ff0471
|
@ -1156,6 +1156,11 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
|
||||||
x = event.getX(i) / mWidth;
|
x = event.getX(i) / mWidth;
|
||||||
y = event.getY(i) / mHeight;
|
y = event.getY(i) / mHeight;
|
||||||
p = event.getPressure(i);
|
p = event.getPressure(i);
|
||||||
|
if (p > 1.0f) {
|
||||||
|
// may be larger than 1.0f on some devices
|
||||||
|
// see the documentation of getPressure(i)
|
||||||
|
p = 1.0f;
|
||||||
|
}
|
||||||
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
|
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1175,6 +1180,11 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
|
||||||
x = event.getX(i) / mWidth;
|
x = event.getX(i) / mWidth;
|
||||||
y = event.getY(i) / mHeight;
|
y = event.getY(i) / mHeight;
|
||||||
p = event.getPressure(i);
|
p = event.getPressure(i);
|
||||||
|
if (p > 1.0f) {
|
||||||
|
// may be larger than 1.0f on some devices
|
||||||
|
// see the documentation of getPressure(i)
|
||||||
|
p = 1.0f;
|
||||||
|
}
|
||||||
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
|
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1184,6 +1194,11 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
|
||||||
x = event.getX(i) / mWidth;
|
x = event.getX(i) / mWidth;
|
||||||
y = event.getY(i) / mHeight;
|
y = event.getY(i) / mHeight;
|
||||||
p = event.getPressure(i);
|
p = event.getPressure(i);
|
||||||
|
if (p > 1.0f) {
|
||||||
|
// may be larger than 1.0f on some devices
|
||||||
|
// see the documentation of getPressure(i)
|
||||||
|
p = 1.0f;
|
||||||
|
}
|
||||||
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, MotionEvent.ACTION_UP, x, y, p);
|
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, MotionEvent.ACTION_UP, x, y, p);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue