From c23b64cdaf73edb0bdf40972c3102ed9a0970e69 Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Fri, 27 Jan 2017 22:57:06 +0200 Subject: [PATCH] SDL: API to change mouse mode on the fly --- project/jni/application/Android.mk | 3 --- .../jni/application/ballfield/ballfield.cpp | 3 ++- project/jni/fontconfig/Android.mk | 2 +- project/jni/sdl-1.2/include/SDL_android.h | 14 ++++++++++++- .../src/video/android/SDL_androidinput.c | 21 +++++++++++++++++++ 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/project/jni/application/Android.mk b/project/jni/application/Android.mk index f162fbeea..2f8fdf47a 100644 --- a/project/jni/application/Android.mk +++ b/project/jni/application/Android.mk @@ -49,9 +49,6 @@ LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) $(filter-out $(APP_AVAILABLE_STATIC LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES)) -$(warning APP LOCAL_SHARED_LIBRARIES $(LOCAL_SHARED_LIBRARIES)) -$(warning APP LOCAL_STATIC_LIBRARIES $(LOCAL_STATIC_LIBRARIES)) - APP_STL := gnustl_static LOCAL_LDLIBS := $(APPLICATION_GLES_LIBRARY) -ldl -llog -lz # -lgnustl_static diff --git a/project/jni/application/ballfield/ballfield.cpp b/project/jni/application/ballfield/ballfield.cpp index 78cd94345..7756c6c72 100644 --- a/project/jni/application/ballfield/ballfield.cpp +++ b/project/jni/application/ballfield/ballfield.cpp @@ -689,11 +689,12 @@ int main(int argc, char* argv[]) if(evt.key.keysym.sym == SDLK_0) { SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, 1); + SDL_ANDROID_SetMouseEmulationMode(0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); } if(evt.key.keysym.sym == SDLK_1) { SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, 0); - SDL_ANDROID_OpenExternalWebBrowser("http:/google.com/"); + SDL_ANDROID_SetMouseEmulationMode(1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); } if(evt.key.keysym.sym == SDLK_2) { diff --git a/project/jni/fontconfig/Android.mk b/project/jni/fontconfig/Android.mk index 7b447f214..ef941b83f 100644 --- a/project/jni/fontconfig/Android.mk +++ b/project/jni/fontconfig/Android.mk @@ -13,7 +13,7 @@ LOCAL_CFLAGS += -DHAVE_CONFIG_H LOCAL_SHARED_LIBRARIES := freetype expat -LOCAL_LDLIBS := -lz +#LOCAL_LDLIBS := -lz LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/include \ diff --git a/project/jni/sdl-1.2/include/SDL_android.h b/project/jni/sdl-1.2/include/SDL_android.h index 2a120e5b0..50dc3ffbb 100644 --- a/project/jni/sdl-1.2/include/SDL_android.h +++ b/project/jni/sdl-1.2/include/SDL_android.h @@ -134,9 +134,21 @@ enum { /* TODO: more options, see Globals.java */ }; -/* Set SDL Android-specifc option, such as video depth or mouse emulation mode. Most options require restarting the app. */ +/* Set SDL Android-specifc option, and save it to SDL config file, such as video depth or mouse emulation mode. Most options require restarting the app. */ extern DECLSPEC void SDLCALL SDL_ANDROID_SetConfigOption(int option, int value); +/* Change mouse emulation mode, pass -1 to any option to keep the current value, this does not change SDL config file. + Currently only relativeMovement is processed, other options are ignored */ +extern DECLSPEC void SDLCALL SDL_ANDROID_SetMouseEmulationMode( + int relativeMovement, int relativeMovementSpeed, int relativeMovementAcceleration, + int leftClickMode, int leftClickKey, int leftClickTimeout, + int rightClickMode, int rightClickKey, int rightClickTimeout, + int moveMouseWithJoystick, int moveMouseWithJoystickSpeed, int moveMouseWithJoystickAcceleration, + int moveMouseWithGyroscope, int moveMouseWithGyroscopeSpeed, + int forceHardwareMouse, int showScreenUnderFinger, + int fingerHover, int fingerHoverJitterFilter, int generateSubframeTouchEvents +); + #ifdef __cplusplus } #endif diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c index 1f1aaf18a..e43d2a1fc 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c @@ -1179,6 +1179,27 @@ JAVA_EXPORT_NAME(Settings_nativeSetMouseUsed) (JNIEnv* env, jobject thiz, } } +void SDLCALL SDL_ANDROID_SetMouseEmulationMode( + int _relativeMovement, int _relativeMovementSpeed, int _relativeMovementAcceleration, + int _leftClickMode, SDLKey _leftClickKey, int _leftClickTimeout, + int _rightClickMode, SDLKey _rightClickKey, int _rightClickTimeout, + int _moveMouseWithJoystick, int _moveMouseWithJoystickSpeed, int _moveMouseWithJoystickAcceleration, + int _moveMouseWithGyroscope, int _moveMouseWithGyroscopeSpeed, + int _forceHardwareMouse, int _showScreenUnderFinger, + int _fingerHover, int _fingerHoverJitterFilter, int _generateSubframeTouchEvents +) +{ + relativeMovement = _relativeMovement; + if (relativeMovement) + { + leftClickMethod = LEFT_CLICK_WITH_TAP_OR_TIMEOUT; + } + else + { + leftClickMethod = LEFT_CLICK_NORMAL; + } +} + typedef struct { int leftClickMethod;