mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-20 22:16:49 +01:00
Implemented SDL_GetDisplayOrientation() on Android (thanks Rachel!)
This commit is contained in:
parent
df5d565f48
commit
a003fa0a05
@ -54,6 +54,14 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
private static final int SDL_SYSTEM_CURSOR_NO = 10;
|
private static final int SDL_SYSTEM_CURSOR_NO = 10;
|
||||||
private static final int SDL_SYSTEM_CURSOR_HAND = 11;
|
private static final int SDL_SYSTEM_CURSOR_HAND = 11;
|
||||||
|
|
||||||
|
protected static final int SDL_ORIENTATION_UNKNOWN = 0;
|
||||||
|
protected static final int SDL_ORIENTATION_LANDSCAPE = 1;
|
||||||
|
protected static final int SDL_ORIENTATION_LANDSCAPE_FLIPPED = 2;
|
||||||
|
protected static final int SDL_ORIENTATION_PORTRAIT = 3;
|
||||||
|
protected static final int SDL_ORIENTATION_PORTRAIT_FLIPPED = 4;
|
||||||
|
|
||||||
|
protected static int mCurrentOrientation;
|
||||||
|
|
||||||
// Handle the state of the native layer
|
// Handle the state of the native layer
|
||||||
public enum NativeState {
|
public enum NativeState {
|
||||||
INIT, RESUMED, PAUSED
|
INIT, RESUMED, PAUSED
|
||||||
@ -250,6 +258,10 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
mLayout = new RelativeLayout(this);
|
mLayout = new RelativeLayout(this);
|
||||||
mLayout.addView(mSurface);
|
mLayout.addView(mSurface);
|
||||||
|
|
||||||
|
// Get our current screen orientation and pass it down.
|
||||||
|
mCurrentOrientation = SDLActivity.getCurrentOrientation();
|
||||||
|
SDLActivity.onNativeOrientationChanged(mCurrentOrientation);
|
||||||
|
|
||||||
setContentView(mLayout);
|
setContentView(mLayout);
|
||||||
|
|
||||||
setWindowStyle(false);
|
setWindowStyle(false);
|
||||||
@ -304,6 +316,32 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
SDLActivity.handleNativeState();
|
SDLActivity.handleNativeState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int getCurrentOrientation() {
|
||||||
|
final Context context = SDLActivity.getContext();
|
||||||
|
final Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
|
||||||
|
|
||||||
|
int result = SDL_ORIENTATION_UNKNOWN;
|
||||||
|
|
||||||
|
switch (display.getRotation()) {
|
||||||
|
case Surface.ROTATION_0:
|
||||||
|
result = SDL_ORIENTATION_PORTRAIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Surface.ROTATION_90:
|
||||||
|
result = SDL_ORIENTATION_LANDSCAPE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Surface.ROTATION_180:
|
||||||
|
result = SDL_ORIENTATION_PORTRAIT_FLIPPED;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Surface.ROTATION_270:
|
||||||
|
result = SDL_ORIENTATION_LANDSCAPE_FLIPPED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onWindowFocusChanged(boolean hasFocus) {
|
public void onWindowFocusChanged(boolean hasFocus) {
|
||||||
@ -628,6 +666,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
public static native void onNativeSurfaceDestroyed();
|
public static native void onNativeSurfaceDestroyed();
|
||||||
public static native String nativeGetHint(String name);
|
public static native String nativeGetHint(String name);
|
||||||
public static native void nativeSetenv(String name, String value);
|
public static native void nativeSetenv(String name, String value);
|
||||||
|
public static native void onNativeOrientationChanged(int orientation);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called by SDL using JNI.
|
* This method is called by SDL using JNI.
|
||||||
@ -1748,28 +1787,45 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
|
|||||||
@Override
|
@Override
|
||||||
public void onSensorChanged(SensorEvent event) {
|
public void onSensorChanged(SensorEvent event) {
|
||||||
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
|
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
|
||||||
|
|
||||||
|
// Since we may have an orientation set, we won't receive onConfigurationChanged events.
|
||||||
|
// We thus should check here.
|
||||||
|
int newOrientation = SDLActivity.SDL_ORIENTATION_UNKNOWN;
|
||||||
|
|
||||||
float x, y;
|
float x, y;
|
||||||
switch (mDisplay.getRotation()) {
|
switch (mDisplay.getRotation()) {
|
||||||
case Surface.ROTATION_90:
|
case Surface.ROTATION_90:
|
||||||
x = -event.values[1];
|
x = -event.values[1];
|
||||||
y = event.values[0];
|
y = event.values[0];
|
||||||
|
newOrientation = SDLActivity.SDL_ORIENTATION_LANDSCAPE;
|
||||||
break;
|
break;
|
||||||
case Surface.ROTATION_270:
|
case Surface.ROTATION_270:
|
||||||
x = event.values[1];
|
x = event.values[1];
|
||||||
y = -event.values[0];
|
y = -event.values[0];
|
||||||
|
newOrientation = SDLActivity.SDL_ORIENTATION_LANDSCAPE_FLIPPED;
|
||||||
break;
|
break;
|
||||||
case Surface.ROTATION_180:
|
case Surface.ROTATION_180:
|
||||||
x = -event.values[1];
|
x = -event.values[1];
|
||||||
y = -event.values[0];
|
y = -event.values[0];
|
||||||
|
newOrientation = SDLActivity.SDL_ORIENTATION_PORTRAIT_FLIPPED;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
x = event.values[0];
|
x = event.values[0];
|
||||||
y = event.values[1];
|
y = event.values[1];
|
||||||
|
newOrientation = SDLActivity.SDL_ORIENTATION_PORTRAIT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (newOrientation != SDLActivity.mCurrentOrientation) {
|
||||||
|
SDLActivity.mCurrentOrientation = newOrientation;
|
||||||
|
SDLActivity.onNativeOrientationChanged(newOrientation);
|
||||||
|
}
|
||||||
|
|
||||||
SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
|
SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
|
||||||
y / SensorManager.GRAVITY_EARTH,
|
y / SensorManager.GRAVITY_EARTH,
|
||||||
event.values[2] / SensorManager.GRAVITY_EARTH);
|
event.values[2] / SensorManager.GRAVITY_EARTH);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,6 +135,10 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetenv)(
|
|||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeEnvironmentVariablesSet)(
|
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeEnvironmentVariablesSet)(
|
||||||
JNIEnv* env, jclass cls);
|
JNIEnv* env, jclass cls);
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeOrientationChanged)(
|
||||||
|
JNIEnv* env, jclass cls,
|
||||||
|
jint orientation);
|
||||||
|
|
||||||
/* Java class SDLInputConnection */
|
/* Java class SDLInputConnection */
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE_INPUT_CONNECTION(nativeCommitText)(
|
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE_INPUT_CONNECTION(nativeCommitText)(
|
||||||
JNIEnv* env, jclass cls,
|
JNIEnv* env, jclass cls,
|
||||||
@ -535,6 +539,14 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeResize)(
|
|||||||
Android_SetScreenResolution(surfaceWidth, surfaceHeight, deviceWidth, deviceHeight, format, rate);
|
Android_SetScreenResolution(surfaceWidth, surfaceHeight, deviceWidth, deviceHeight, format, rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeOrientationChanged)(
|
||||||
|
JNIEnv *env, jclass jcls,
|
||||||
|
jint orientation)
|
||||||
|
{
|
||||||
|
SDL_VideoDisplay *display = SDL_GetDisplay(0);
|
||||||
|
SDL_SendDisplayEvent(display, SDL_DISPLAYEVENT_ORIENTATION, orientation);
|
||||||
|
}
|
||||||
|
|
||||||
/* Paddown */
|
/* Paddown */
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativePadDown)(
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativePadDown)(
|
||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
|
Loading…
Reference in New Issue
Block a user