From df9ffa1c2bd674636a2534a2d8f482aea0166c9d Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Thu, 16 Nov 2017 21:36:15 +0200 Subject: [PATCH] SDL: added keycodes for gamepad analog sticks to SDL_ANDROID_SetIndividualGamepadKeymap(), while API is still fresh --- changeAppSettings.sh | 2 +- .../ballfield/AndroidAppSettings.cfg | 6 +- .../jni/sdl-1.2/include/SDL_screenkeyboard.h | 14 +- .../src/video/android/SDL_androidinput.c | 228 +++++++++++------- .../src/video/android/SDL_androidinput.h | 100 ++++++++ .../src/video/android/SDL_androidvideo-1.2.c | 3 +- .../sdl-1.2/src/video/android/javakeycodes.h | 40 +++ .../jni/sdl-1.2/src/video/android/keymap.c | 40 ++- .../sdl-1.2/src/video/android/unicodestuff.h | 2 +- readme.txt | 7 +- 10 files changed, 340 insertions(+), 102 deletions(-) diff --git a/changeAppSettings.sh b/changeAppSettings.sh index 7c1ab637c..f87c6a214 100755 --- a/changeAppSettings.sh +++ b/changeAppSettings.sh @@ -358,7 +358,7 @@ echo "# 9 = Nintendo64 from RetroArch" >> AndroidAppSettings.cfg echo TouchscreenKeysTheme=$TouchscreenKeysTheme >> AndroidAppSettings.cfg echo >> AndroidAppSettings.cfg echo "# Redefine gamepad keys to SDL keysyms, button order is:" >> AndroidAppSettings.cfg -echo "# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right" >> AndroidAppSettings.cfg +echo "# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right LThumbUp LThumbDown LThumbLeft LThumbRight RThumbUp RThumbDown RThumbLeft RThumbRight" >> AndroidAppSettings.cfg echo RedefinedKeysGamepad=\"$RedefinedKeysGamepad\" >> AndroidAppSettings.cfg echo >> AndroidAppSettings.cfg echo "# Redefine keys for the second gamepad, same as the first gamepad if not set:" >> AndroidAppSettings.cfg diff --git a/project/jni/application/ballfield/AndroidAppSettings.cfg b/project/jni/application/ballfield/AndroidAppSettings.cfg index b041883fc..224e76de4 100644 --- a/project/jni/application/ballfield/AndroidAppSettings.cfg +++ b/project/jni/application/ballfield/AndroidAppSettings.cfg @@ -225,11 +225,11 @@ RedefinedKeysScreenKbNames="0 1 2 3 4 5 6 7 8 9" TouchscreenKeysTheme=3 # Redefine gamepad keys to SDL keysyms, button order is: -# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right -RedefinedKeysGamepad="0 1 2 3 4 5 6 7 8 9" +# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right LThumbUp LThumbDown LThumbLeft LThumbRight RThumbUp RThumbDown RThumbLeft RThumbRight +RedefinedKeysGamepad="0 1 2 3 4 5 6 7 8 9 j k UP DOWN LEFT RIGHT PAGEUP PAGEDOWN HOME END PLUS MINUS LEFTBRACKET RIGHTBRACKET" # Redefine keys for the second gamepad, same as the first gamepad if not set: -RedefinedKeysSecondGamepad="q w e r t y u i o p a s d f g h" +RedefinedKeysSecondGamepad="q w e r t y u i o p a s d f g h z x c v b n m COMMA" # Redefine keys for the third gamepad, same as the first gamepad if not set: RedefinedKeysThirdGamepad="F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 PRINT" diff --git a/project/jni/sdl-1.2/include/SDL_screenkeyboard.h b/project/jni/sdl-1.2/include/SDL_screenkeyboard.h index 48e38a238..7fa0ea1d6 100644 --- a/project/jni/sdl-1.2/include/SDL_screenkeyboard.h +++ b/project/jni/sdl-1.2/include/SDL_screenkeyboard.h @@ -169,16 +169,24 @@ extern DECLSPEC int SDLCALL SDL_IsScreenKeyboardShown(void *unused); enum { - SDL_ANDROID_MAX_GAMEPADS = 4, // Maximum amount of gamepads supported + SDL_ANDROID_MAX_GAMEPADS = 4, /* Maximum amount of gamepads supported */ + SDL_ANDROID_FIRST_GAMEPAD_ID = 2, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */ + SDL_ANDROID_SECOND_GAMEPAD_ID = 3, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */ + SDL_ANDROID_THIRD_GAMEPAD_ID = 4, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */ + SDL_ANDROID_FOURTH_GAMEPAD_ID = 5, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */ }; /* Remap SDL keycodes returned by gamepad buttons. Pass the SDLK_ constants, or 0 to leave old value. On OUYA: O = A, U = X, Y = Y, A = B. - GamepadId is from 0 to 3, up to SDL_ANDROID_MAX_GAMEPADS */ + GamepadId is from 0 to 3, up to SDL_ANDROID_MAX_GAMEPADS + Analog thumb joysticks will send keycodes instead of joystick events + only if SDL_JoystickOpen() was NOT called for joystick IDs from 2 to 5. */ extern DECLSPEC void SDLCALL SDL_ANDROID_SetIndividualGamepadKeymap(int GamepadId, int A, int B, int X, int Y, int L1, int R1, int L2, int R2, int LThumb, int RThumb, - int Start, int Select, int Up, int Down, int Left, int Right); + int Start, int Select, int Up, int Down, int Left, int Right, + int LThumbUp, int LThumbDown, int LThumbLeft, int LThumbRight, + int RThumbUp, int RThumbDown, int RThumbLeft, int RThumbRight); /* Deprecated API, will change keymap for all gamepads */ extern DECLSPEC void SDLCALL SDL_ANDROID_SetGamepadKeymap(int A, int B, int X, int Y, int L1, int R1, int L2, int R2, int LThumb, int RThumb); 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 98eb00c0c..1ac47ea82 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 @@ -83,7 +83,15 @@ enum { RIGHT_CLICK_NONE = 0, RIGHT_CLICK_WITH_MULTITOUCH = 1, RIGHT_CLICK_WITH_P RIGHT_CLICK_WITH_KEY = 3, RIGHT_CLICK_WITH_TIMEOUT = 4 }; enum { LEFT_CLICK_NORMAL = 0, LEFT_CLICK_NEAR_CURSOR = 1, LEFT_CLICK_WITH_MULTITOUCH = 2, LEFT_CLICK_WITH_PRESSURE = 3, LEFT_CLICK_WITH_KEY = 4, LEFT_CLICK_WITH_TIMEOUT = 5, LEFT_CLICK_WITH_TAP = 6, LEFT_CLICK_WITH_TAP_OR_TIMEOUT = 7 }; -enum { JOY_TOUCHSCREEN = 0, JOY_ACCELGYRO = 1, JOY_GAMEPAD1 = 2, JOY_GAMEPAD2 = 3, JOY_GAMEPAD3 = 4, JOY_GAMEPAD4 = 5 }; +enum +{ + JOY_TOUCHSCREEN = 0, + JOY_ACCELGYRO = 1, + JOY_GAMEPAD1 = SDL_ANDROID_FIRST_GAMEPAD_ID, + JOY_GAMEPAD2 = SDL_ANDROID_SECOND_GAMEPAD_ID, + JOY_GAMEPAD3 = SDL_ANDROID_THIRD_GAMEPAD_ID, + JOY_GAMEPAD4 = SDL_ANDROID_FOURTH_GAMEPAD_ID +}; static int leftClickMethod = LEFT_CLICK_NORMAL; static int rightClickMethod = RIGHT_CLICK_NONE; static int leftClickKey = KEYCODE_DPAD_CENTER; @@ -171,7 +179,7 @@ static inline int InsideRect( const SDL_Rect * r, int x, int y ) return ( x >= r->x && x <= r->x + r->w ) && ( y >= r->y && y <= r->y + r->h ); } -void UpdateScreenUnderFingerRect( int x, int y ) +void SDL_ANDROID_UpdateScreenUnderFingerRect( int x, int y ) { #if SDL_VERSION_ATLEAST(1,3,0) return; @@ -596,7 +604,7 @@ static int ProcessMouseDown( int x, int y ) else { SDL_ANDROID_MainThreadPushMouseMotion(x, y); - action == MOUSE_MOVE; + action = MOUSE_MOVE; mouseInitialX = x; mouseInitialY = y; mouseInitialTime = SDL_GetTicks(); @@ -605,7 +613,7 @@ static int ProcessMouseDown( int x, int y ) sem_post(&mouseClickTimeoutSemaphore); } if( SDL_ANDROID_ShowScreenUnderFinger == ZOOM_MAGNIFIER ) - UpdateScreenUnderFingerRect(x, y); + SDL_ANDROID_UpdateScreenUnderFingerRect(x, y); return action; } @@ -645,7 +653,7 @@ static void ProcessMouseMove_Timeouts( int x, int y ) } } if( SDL_ANDROID_ShowScreenUnderFinger == ZOOM_MAGNIFIER ) - UpdateScreenUnderFingerRect(x, y); + SDL_ANDROID_UpdateScreenUnderFingerRect(x, y); } static void ProcessMouseMove( int x, int y, int force, int radius ) @@ -784,7 +792,7 @@ static void ProcessMouseHover( jint *xx, jint *yy, int action, int distance ) } if( action == MOUSE_HOVER && distance < HOVER_DISTANCE_MAX * 3 / 4 ) - UpdateScreenUnderFingerRect(*xx, *yy); + SDL_ANDROID_UpdateScreenUnderFingerRect(*xx, *yy); else SDL_ANDROID_ShowScreenUnderFingerRect.w = SDL_ANDROID_ShowScreenUnderFingerRect.h = 0; // This is reset later by ProcessMouseMove() @@ -1449,63 +1457,101 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeGamepadAnalogJoystickInput) (JNIEnv* en } else { - if( fabsf(dpadx) < 0.01f && fabsf(dpady) < 0.01f ) + if( SDL_ANDROID_moveMouseWithArrowKeys ) { - dpadx = stick1x; - dpady = stick1y; + if( fabsf(stick2x) > 0.2f || fabsf(stick2y) > 0.2f ) + { + // Move mouse with right stick + SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded |= 4; + SDL_ANDROID_moveMouseWithKbSpeedX = stick2x * 3 * SDL_ANDROID_moveMouseWithKbSpeed; + SDL_ANDROID_moveMouseWithKbSpeedY = stick2y * 3 * SDL_ANDROID_moveMouseWithKbSpeed; + } + else + { + SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded &= ~4; + } } - if( fabsf(stick2x) > 0.2f || fabsf(stick2y) > 0.2f ) + // Translate analog sticks to keypresses + if( stick1y < -0.5f ) { - // Move mouse with right stick - SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded |= 4; - SDL_ANDROID_moveMouseWithKbSpeedX = stick2x * 3 * SDL_ANDROID_moveMouseWithKbSpeed; - SDL_ANDROID_moveMouseWithKbSpeedY = stick2y * 3 * SDL_ANDROID_moveMouseWithKbSpeed; + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP], 0 ); } else { - SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded &= ~4; + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP], 0 ); + } + if( stick1y > 0.5f ) + { + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN], 0 ); + } + else + { + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN], 0 ); + } + if( stick1x < -0.5f ) + { + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT], 0 ); + } + else + { + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT], 0 ); + } + if( stick1x > 0.5f ) + { + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT], 0 ); + } + else + { + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT], 0 ); + } + if( stick2y < -0.5f ) + { + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP], 0 ); + } + else + { + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP], 0 ); + } + if( stick2y > 0.5f ) + { + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN], 0 ); + } + else + { + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN], 0 ); + } + if( stick2x < -0.5f ) + { + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT], 0 ); + } + else + { + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT], 0 ); + } + if( stick2x > 0.5f ) + { + if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT], 0 ); + } + else + { + if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT]] ) + SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT], 0 ); } - } - // Translate to up/down/left/right - if( dpadx < -0.5f ) - { - if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT], 0 ); - } - else - { - if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT], 0 ); - } - if( dpadx > 0.5f ) - { - if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT], 0 ); - } - else - { - if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT], 0 ); - } - if( dpady < -0.5f ) - { - if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP], 0 ); - } - else - { - if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP], 0 ); - } - if( dpady > 0.5f ) - { - if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN], 0 ); - } - else - { - if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN]] ) - SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN], 0 ); } } @@ -1702,7 +1748,9 @@ JAVA_EXPORT_NAME(Settings_nativeInitKeymap) ( JNIEnv* env, jobject thiz ) void SDL_ANDROID_SetIndividualGamepadKeymap(int GamepadId, int A, int B, int X, int Y, int L1, int R1, int L2, int R2, int LThumb, int RThumb, - int Start, int Select, int Up, int Down, int Left, int Right) + int Start, int Select, int Up, int Down, int Left, int Right, + int LThumbUp, int LThumbDown, int LThumbLeft, int LThumbRight, + int RThumbUp, int RThumbDown, int RThumbLeft, int RThumbRight) { /* Arguments are SDL keycodes. Use the SDLK_ constants. @@ -1719,34 +1767,42 @@ void SDL_ANDROID_SetIndividualGamepadKeymap(int GamepadId, if( GamepadId < 0 || GamepadId >= SDL_ANDROID_MAX_GAMEPADS ) return; - if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_A] = A; - if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_3] = A; - if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_B] = B; - if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_2] = B; - if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_X] = X; - if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_4] = X; - if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_Y] = Y; - if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_1] = Y; - if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L1] = L1; - if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_5] = L1; - if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R1] = R1; - if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_6] = R1; - if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L2] = L2; - if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_7] = L2; - if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R2] = R2; - if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_8] = R2; - if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBL] = LThumb; - if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_11] = LThumb; - if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBR] = RThumb; - if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_12] = RThumb; - if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_START] = Start; - if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_9] = Start; - if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_SELECT] = Select; - if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_10] = Select; - if (Up) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_UP] = Up; - if (Down) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_DOWN] = Down; - if (Left) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_LEFT] = Left; - if (Right) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_RIGHT] = Right; + if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_A] = A; + if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_3] = A; + if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_B] = B; + if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_2] = B; + if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_X] = X; + if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_4] = X; + if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_Y] = Y; + if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_1] = Y; + if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L1] = L1; + if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_5] = L1; + if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R1] = R1; + if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_6] = R1; + if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L2] = L2; + if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_7] = L2; + if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R2] = R2; + if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_8] = R2; + if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBL] = LThumb; + if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_11] = LThumb; + if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBR] = RThumb; + if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_12] = RThumb; + if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_START] = Start; + if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_9] = Start; + if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_SELECT] = Select; + if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_10] = Select; + if (Up) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_UP] = Up; + if (Down) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_DOWN] = Down; + if (Left) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_LEFT] = Left; + if (Right) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_RIGHT] = Right; + if (LThumbUp) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_UP] = LThumbUp; + if (LThumbDown) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_DOWN] = LThumbDown; + if (LThumbLeft) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_LEFT] = LThumbLeft; + if (LThumbRight) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_RIGHT] = LThumbRight; + if (RThumbUp) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_UP] = RThumbUp; + if (RThumbDown) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_DOWN] = RThumbDown; + if (RThumbLeft) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_LEFT] = RThumbLeft; + if (RThumbRight) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_RIGHT] = RThumbRight; if( GamepadId == 0 ) { @@ -1767,7 +1823,7 @@ void SDL_ANDROID_SetGamepadKeymap(int A, int B, int X, int Y, int L1, int R1, in int i; for( i = 0; i < SDL_ANDROID_MAX_GAMEPADS; i++ ) { - SDL_ANDROID_SetIndividualGamepadKeymap(i, A, B, X, Y, L1, R1, L2, R2, LThumb, RThumb, 0, 0, 0, 0, 0, 0); + SDL_ANDROID_SetIndividualGamepadKeymap(i, A, B, X, Y, L1, R1, L2, R2, LThumb, RThumb, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } } diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h index 5b1c9b6ae..345312d29 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h @@ -260,6 +260,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed; #ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_15 #define SDL_ANDROID_GAMEPAD_0_KEYCODE_15 RIGHT #endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_16 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_16 UP +#endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_17 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_17 DOWN +#endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_18 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_18 LEFT +#endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_19 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_19 RIGHT +#endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_20 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_20 UNKNOWN +#endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_21 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_21 UNKNOWN +#endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_22 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_22 UNKNOWN +#endif +#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_23 +#define SDL_ANDROID_GAMEPAD_0_KEYCODE_23 UNKNOWN +#endif #ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_0 #define SDL_ANDROID_GAMEPAD_1_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0 @@ -309,6 +333,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed; #ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_15 #define SDL_ANDROID_GAMEPAD_1_KEYCODE_15 SDL_ANDROID_GAMEPAD_0_KEYCODE_15 #endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_16 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_16 SDL_ANDROID_GAMEPAD_0_KEYCODE_16 +#endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_17 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_17 SDL_ANDROID_GAMEPAD_0_KEYCODE_17 +#endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_18 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_18 SDL_ANDROID_GAMEPAD_0_KEYCODE_18 +#endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_19 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_19 SDL_ANDROID_GAMEPAD_0_KEYCODE_19 +#endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_20 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_20 SDL_ANDROID_GAMEPAD_0_KEYCODE_20 +#endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_21 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_21 SDL_ANDROID_GAMEPAD_0_KEYCODE_21 +#endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_22 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_22 SDL_ANDROID_GAMEPAD_0_KEYCODE_22 +#endif +#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_23 +#define SDL_ANDROID_GAMEPAD_1_KEYCODE_23 SDL_ANDROID_GAMEPAD_0_KEYCODE_23 +#endif #ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_0 #define SDL_ANDROID_GAMEPAD_2_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0 @@ -358,6 +406,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed; #ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_15 #define SDL_ANDROID_GAMEPAD_2_KEYCODE_15 SDL_ANDROID_GAMEPAD_0_KEYCODE_15 #endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_16 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_16 SDL_ANDROID_GAMEPAD_0_KEYCODE_16 +#endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_17 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_17 SDL_ANDROID_GAMEPAD_0_KEYCODE_17 +#endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_18 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_18 SDL_ANDROID_GAMEPAD_0_KEYCODE_18 +#endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_19 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_19 SDL_ANDROID_GAMEPAD_0_KEYCODE_19 +#endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_20 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_20 SDL_ANDROID_GAMEPAD_0_KEYCODE_20 +#endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_21 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_21 SDL_ANDROID_GAMEPAD_0_KEYCODE_21 +#endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_22 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_22 SDL_ANDROID_GAMEPAD_0_KEYCODE_22 +#endif +#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_23 +#define SDL_ANDROID_GAMEPAD_2_KEYCODE_23 SDL_ANDROID_GAMEPAD_0_KEYCODE_23 +#endif #ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_0 #define SDL_ANDROID_GAMEPAD_3_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0 @@ -407,6 +479,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed; #ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_15 #define SDL_ANDROID_GAMEPAD_3_KEYCODE_15 SDL_ANDROID_GAMEPAD_0_KEYCODE_15 #endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_16 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_16 SDL_ANDROID_GAMEPAD_0_KEYCODE_16 +#endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_17 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_17 SDL_ANDROID_GAMEPAD_0_KEYCODE_17 +#endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_18 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_18 SDL_ANDROID_GAMEPAD_0_KEYCODE_18 +#endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_19 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_19 SDL_ANDROID_GAMEPAD_0_KEYCODE_19 +#endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_20 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_20 SDL_ANDROID_GAMEPAD_0_KEYCODE_20 +#endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_21 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_21 SDL_ANDROID_GAMEPAD_0_KEYCODE_21 +#endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_22 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_22 SDL_ANDROID_GAMEPAD_0_KEYCODE_22 +#endif +#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_23 +#define SDL_ANDROID_GAMEPAD_3_KEYCODE_23 SDL_ANDROID_GAMEPAD_0_KEYCODE_23 +#endif // Queue events to main thread @@ -422,6 +518,10 @@ extern void SDL_ANDROID_MainThreadPushText( int ascii, int unicode ); extern void SDL_android_init_keymap(SDLKey *SDL_android_keymap); extern void SDL_ANDROID_MainThreadPushMouseWheel( int x, int y ); // SDL 1.3 only extern void SDL_ANDROID_MainThreadPushAppActive(int active); +extern void SDL_ANDROID_UpdateScreenUnderFingerRect(int x, int y); +extern void SDL_ANDROID_DeferredTextInput(void); + + // Internal input queue stuff extern SDLKey SDL_android_keymap[KEYCODE_LAST+1]; diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c index 53619dc16..732785c5a 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo-1.2.c @@ -31,6 +31,7 @@ If you compile this code with SDL 1.3 or newer, or use in some other way, the li #include "SDL_mouse.h" #include "SDL_mutex.h" #include "SDL_thread.h" +#include "SDL_timer.h" #include "../SDL_sysvideo.h" #include "../SDL_pixels_c.h" #include "../../events/SDL_events_c.h" @@ -519,7 +520,7 @@ SDL_Surface *ANDROID_SetVideoMode(_THIS, SDL_Surface *current, /* Set up the new mode framebuffer */ SDL_CurrentVideoSurface = current; - UpdateScreenUnderFingerRect(0,0); + SDL_ANDROID_UpdateScreenUnderFingerRect(0,0); SDL_ANDROID_ShowScreenUnderFingerRect.w = SDL_ANDROID_ShowScreenUnderFingerRect.h = 0; SDL_ANDROID_SetHoverDeadzone(); SDL_ANDROID_currentMouseX = SDL_ANDROID_sFakeWindowWidth / 2; diff --git a/project/jni/sdl-1.2/src/video/android/javakeycodes.h b/project/jni/sdl-1.2/src/video/android/javakeycodes.h index 94df6eeb0..5de5c3144 100644 --- a/project/jni/sdl-1.2/src/video/android/javakeycodes.h +++ b/project/jni/sdl-1.2/src/video/android/javakeycodes.h @@ -271,6 +271,46 @@ KEYCODE_TV_MEDIA_CONTEXT_MENU = 257, KEYCODE_TV_TIMER_PROGRAMMING = 258, KEYCODE_HELP = 259, +// Oreo added even more + +KEYCODE_NAVIGATE_PREVIOUS = 260, +KEYCODE_NAVIGATE_NEXT = 261, +KEYCODE_NAVIGATE_IN = 262, +KEYCODE_NAVIGATE_OUT = 263, +KEYCODE_STEM_PRIMARY = 264, +KEYCODE_STEM_1 = 265, +KEYCODE_STEM_2 = 266, +KEYCODE_STEM_3 = 267, +KEYCODE_DPAD_UP_LEFT = 268, +KEYCODE_DPAD_DOWN_LEFT = 269, +KEYCODE_DPAD_UP_RIGHT = 270, +KEYCODE_DPAD_DOWN_RIGHT = 271, +KEYCODE_MEDIA_SKIP_FORWARD = 272, +KEYCODE_MEDIA_SKIP_BACKWARD = 273, +KEYCODE_MEDIA_STEP_FORWARD = 274, +KEYCODE_MEDIA_STEP_BACKWARD = 275, +KEYCODE_SOFT_SLEEP = 276, +KEYCODE_CUT = 277, +KEYCODE_COPY = 278, +KEYCODE_PASTE = 279, +KEYCODE_SYSTEM_NAVIGATION_UP = 280, +KEYCODE_SYSTEM_NAVIGATION_DOWN = 281, +KEYCODE_SYSTEM_NAVIGATION_LEFT = 282, +KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283, + +// No more Android keycodes please! Or I'll have to change SDL-specific keycodes + +// SDL-specific keycodes +// Gamepad analog joysticks can also send keycodes +KEYCODE_LTHUMB_UP = 285, +KEYCODE_LTHUMB_DOWN = 286, +KEYCODE_LTHUMB_LEFT = 287, +KEYCODE_LTHUMB_RIGHT = 288, +KEYCODE_RTHUMB_UP = 289, +KEYCODE_RTHUMB_DOWN = 290, +KEYCODE_RTHUMB_LEFT = 291, +KEYCODE_RTHUMB_RIGHT = 292, + // Press mouse buttons with keyboard events KEYCODE_MOUSE_LEFT = 293, KEYCODE_MOUSE_MIDDLE = 294, diff --git a/project/jni/sdl-1.2/src/video/android/keymap.c b/project/jni/sdl-1.2/src/video/android/keymap.c index 8d7546b2b..2b3b50722 100644 --- a/project/jni/sdl-1.2/src/video/android/keymap.c +++ b/project/jni/sdl-1.2/src/video/android/keymap.c @@ -285,7 +285,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap) SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_12)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_13)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_14)), - SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15)) + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_16)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_17)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_18)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_19)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_20)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_21)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_22)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_23)) ); SDL_ANDROID_SetIndividualGamepadKeymap( 1, @@ -304,7 +312,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap) SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_12)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_13)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_14)), - SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_15)) + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_15)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_16)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_17)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_18)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_19)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_20)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_21)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_22)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_23)) ); SDL_ANDROID_SetIndividualGamepadKeymap( 2, @@ -323,7 +339,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap) SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_12)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_13)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_14)), - SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_15)) + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_15)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_16)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_17)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_18)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_19)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_20)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_21)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_22)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_23)) ); SDL_ANDROID_SetIndividualGamepadKeymap( 3, @@ -342,7 +366,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap) SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_12)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_13)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_14)), - SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_15)) + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_15)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_16)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_17)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_18)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_19)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_20)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_21)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_22)), + SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_23)) ); } diff --git a/project/jni/sdl-1.2/src/video/android/unicodestuff.h b/project/jni/sdl-1.2/src/video/android/unicodestuff.h index 466186c3a..5314944b1 100644 --- a/project/jni/sdl-1.2/src/video/android/unicodestuff.h +++ b/project/jni/sdl-1.2/src/video/android/unicodestuff.h @@ -46,7 +46,7 @@ static inline SDL_keysym asciiToKeysym(int ascii, int unicode) if ( ascii < SDLK_LAST ) keysym.scancode = SDL_android_keysym_to_scancode[ascii]; keysym.sym = ascii; - if (keysym.sym < 0 || keysym.sym >= SDLK_LAST) + if (keysym.sym >= SDLK_LAST) keysym.sym = SDLK_UNKNOWN; keysym.mod = KMOD_NONE; keysym.unicode = 0; diff --git a/readme.txt b/readme.txt index 46e754fc9..419a510e4 100644 --- a/readme.txt +++ b/readme.txt @@ -280,9 +280,10 @@ with value 32767 equal to 0.25 rad/s. Multiple events will be sent at once, if t You will need to set AppUsesGyroscope=y in AndroidAppSettings.cfg to use it, and call SDL_JoystickOpen(1). Gyroscope hardware is much more precise and less noisy than accelerometer, it is present on newer devices starting from Galaxy S II, but older devices do no have it - it is emulated with accelerometer + compass. -SDL also supports gamepad - you can plug PS3/Xbox gamepad to almost any tablet, some devices have built-in gamepad. -Gamepad stick events are sent as SDL_JOYAXISMOTION, with event.jaxis.which == 2 and event.jaxis.axis from 0 to 3. -Gamepad analog L1/R1 buttons are sent as SDL_JOYAXISMOTION, with event.jaxis.which == 2 and event.jaxis.axis from 4 to 5. +SDL also supports gamepads - you can plug PS3/Xbox gamepad to almost any tablet, some devices have built-in gamepad. +Gamepad stick events are sent as SDL_JOYAXISMOTION, with event.jaxis.which from 2 to 5 and event.jaxis.axis from 0 to 3. +Gamepad analog L1/R1 buttons are sent as SDL_JOYAXISMOTION, with event.jaxis.which from 2 to 5 and event.jaxis.axis from 4 to 5. +The gamepad where any button was pressed becomes the first gamepad. Maximum 4 gamepads are supported. Other gamepad buttons generate key events, which are taken from RedefinedKeysGamepad in AndroidAppSettings.cfg.