From 6f758ad25f72aa450128ad2b67aeaa7ce1a5249c Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 21 Aug 2018 20:03:54 -0700 Subject: [PATCH] Moved SDL_IsTablet() to a cross-platform API function --- include/SDL_system.h | 14 +++++--------- src/SDL.c | 14 ++++++++++++++ src/core/android/SDL_android.c | 21 +++++++++++---------- src/dynapi/SDL_dynapi_overrides.h | 3 +-- src/dynapi/SDL_dynapi_procs.h | 4 +--- src/video/uikit/SDL_uikitvideo.m | 4 ++-- 6 files changed, 34 insertions(+), 26 deletions(-) diff --git a/include/SDL_system.h b/include/SDL_system.h index 00eb7a4759b19..4dc372d6b14bb 100644 --- a/include/SDL_system.h +++ b/include/SDL_system.h @@ -174,15 +174,6 @@ extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void); #endif /* __ANDROID__ */ -#if defined(__ANDROID__) || defined(__IPHONEOS__) - -/** - \brief Return true if the current device is a tablet. - */ -extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); - -#endif - /* Platform specific functions for WinRT */ #if defined(__WINRT__) && __WINRT__ @@ -272,6 +263,11 @@ extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily(); #endif /* __WINRT__ */ +/** + \brief Return true if the current device is a tablet. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/src/SDL.c b/src/SDL.c index 6d014a4f0a342..5a1e0febeae60 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -475,6 +475,20 @@ SDL_GetPlatform() #endif } +SDL_bool +SDL_IsTablet() +{ +#if __ANDROID__ + extern SDL_bool SDL_IsAndroidTablet(void); + return SDL_IsAndroidTablet(); +#elif __IPHONEOS__ + extern SDL_bool SDL_IsIPad(void); + return SDL_IsIPad(); +#else + return SDL_FALSE; +#endif +} + #if defined(__WIN32__) #if (!defined(HAVE_LIBC) || defined(__WATCOMC__)) && !defined(SDL_STATIC_LIB) diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index 159e6d401e684..636371531dd76 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -213,6 +213,7 @@ static jmethodID midSetActivityTitle; static jmethodID midSetWindowStyle; static jmethodID midSetOrientation; static jmethodID midGetContext; +static jmethodID midIsTablet; static jmethodID midIsAndroidTV; static jmethodID midIsChromebook; static jmethodID midIsDeXMode; @@ -232,7 +233,6 @@ static jmethodID midSetCustomCursor; static jmethodID midSetSystemCursor; static jmethodID midSupportsRelativeMouse; static jmethodID midSetRelativeMouseEnabled; -static jmethodID midIsTablet; /* audio manager */ static jclass mAudioManagerClass; @@ -319,6 +319,8 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c "setOrientation","(IIZLjava/lang/String;)V"); midGetContext = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "getContext","()Landroid/content/Context;"); + midIsTablet = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, + "isTablet", "()Z"); midIsAndroidTV = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "isAndroidTV","()Z"); midIsChromebook = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, @@ -355,15 +357,14 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c midSupportsRelativeMouse = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "supportsRelativeMouse", "()Z"); midSetRelativeMouseEnabled = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "setRelativeMouseEnabled", "(Z)Z"); - midIsTablet = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "isTablet", "()Z"); if (!midGetNativeSurface || - !midSetActivityTitle || !midSetWindowStyle || !midSetOrientation || !midGetContext || !midIsAndroidTV || !midInputGetInputDeviceIds || + !midSetActivityTitle || !midSetWindowStyle || !midSetOrientation || !midGetContext || !midIsTablet || !midIsAndroidTV || !midInputGetInputDeviceIds || !midSendMessage || !midShowTextInput || !midIsScreenKeyboardShown || !midClipboardSetText || !midClipboardGetText || !midClipboardHasText || !midOpenAPKExpansionInputStream || !midGetManifestEnvironmentVariables || !midGetDisplayDPI || !midCreateCustomCursor || !midSetCustomCursor || !midSetSystemCursor || !midSupportsRelativeMouse || !midSetRelativeMouseEnabled || - !midIsChromebook || !midIsDeXMode || !midManualBackButton || !midIsTablet) { + !midIsChromebook || !midIsDeXMode || !midManualBackButton) { __android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLActivity.java?"); } @@ -2033,6 +2034,12 @@ void *SDL_AndroidGetActivity(void) return (*env)->CallStaticObjectMethod(env, mActivityClass, midGetContext); } +SDL_bool SDL_IsAndroidTablet(void) +{ + JNIEnv *env = Android_JNI_GetEnv(); + return (*env)->CallStaticBooleanMethod(env, mActivityClass, midIsTablet); +} + SDL_bool SDL_IsAndroidTV(void) { JNIEnv *env = Android_JNI_GetEnv(); @@ -2051,12 +2058,6 @@ SDL_bool SDL_IsDeXMode(void) return (*env)->CallStaticBooleanMethod(env, mActivityClass, midIsDeXMode); } -SDL_bool SDL_IsTablet(void) -{ - JNIEnv *env = Android_JNI_GetEnv(); - return (*env)->CallStaticBooleanMethod(env, mActivityClass, midIsTablet); -} - void SDL_AndroidBackButton(void) { JNIEnv *env = Android_JNI_GetEnv(); diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index 213f40f12cdbc..a58fe90face82 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -680,8 +680,6 @@ #define SDL_wcsdup SDL_wcsdup_REAL #define SDL_GameControllerRumble SDL_GameControllerRumble_REAL #define SDL_JoystickRumble SDL_JoystickRumble_REAL -#define SDL_IsTablet SDL_IsTablet_REAL -#define SDL_IsTablet SDL_IsTablet_REAL #define SDL_NumSensors SDL_NumSensors_REAL #define SDL_SensorGetDeviceName SDL_SensorGetDeviceName_REAL #define SDL_SensorGetDeviceType SDL_SensorGetDeviceType_REAL @@ -696,3 +694,4 @@ #define SDL_SensorGetData SDL_SensorGetData_REAL #define SDL_SensorClose SDL_SensorClose_REAL #define SDL_SensorUpdate SDL_SensorUpdate_REAL +#define SDL_IsTablet SDL_IsTablet_REAL diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index 37ccdbd22647b..1bbc22810a637 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -722,9 +722,6 @@ SDL_DYNAPI_PROC(float,SDL_expf,(float a),(a),return) SDL_DYNAPI_PROC(wchar_t*,SDL_wcsdup,(const wchar_t *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GameControllerRumble,(SDL_GameController *a, Uint16 b, Uint16 c, Uint32 d),(a,b,c,d),return) SDL_DYNAPI_PROC(int,SDL_JoystickRumble,(SDL_Joystick *a, Uint16 b, Uint16 c, Uint32 d),(a,b,c,d),return) -#if defined(__ANDROID__) || defined(__IPHONEOS__) -SDL_DYNAPI_PROC(SDL_bool,SDL_IsTablet,(void),(),return) -#endif SDL_DYNAPI_PROC(int,SDL_NumSensors,(void),(),return) SDL_DYNAPI_PROC(const char*,SDL_SensorGetDeviceName,(int a),(a),return) SDL_DYNAPI_PROC(SDL_SensorType,SDL_SensorGetDeviceType,(int a),(a),return) @@ -739,3 +736,4 @@ SDL_DYNAPI_PROC(SDL_SensorID,SDL_SensorGetInstanceID,(SDL_Sensor *a),(a),return) SDL_DYNAPI_PROC(int,SDL_SensorGetData,(SDL_Sensor *a, float *b, int c),(a,b,c),return) SDL_DYNAPI_PROC(void,SDL_SensorClose,(SDL_Sensor *a),(a),) SDL_DYNAPI_PROC(void,SDL_SensorUpdate,(void),(),) +SDL_DYNAPI_PROC(SDL_bool,SDL_IsTablet,(void),(),return) diff --git a/src/video/uikit/SDL_uikitvideo.m b/src/video/uikit/SDL_uikitvideo.m index aec49a581a3dd..10d1dde312acf 100644 --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -237,9 +237,9 @@ void SDL_NSLog(const char *text) * iOS Tablet detection * * This doesn't really have aything to do with the interfaces of the SDL video - * subsystem, but we need to stuff this into an Objective-C source code file. + * subsystem, but we need to stuff this into an Objective-C source code file. */ -SDL_bool SDL_IsTablet(void) +SDL_bool SDL_IsIPad(void) { return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); }