SDL: added keycodes for gamepad analog sticks to SDL_ANDROID_SetIndividualGamepadKeymap(), while API is still fresh

This commit is contained in:
Sergii Pylypenko
2017-11-16 21:36:15 +02:00
parent e618b3a2d0
commit df9ffa1c2b
10 changed files with 340 additions and 102 deletions

View File

@@ -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);
}
}

View File

@@ -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];

View File

@@ -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;

View File

@@ -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,

View File

@@ -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))
);
}

View File

@@ -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;