diff --git a/project/jni/sdl-1.2/include/SDL_screenkeyboard.h b/project/jni/sdl-1.2/include/SDL_screenkeyboard.h index 2fb87654d..b605cf911 100644 --- a/project/jni/sdl-1.2/include/SDL_screenkeyboard.h +++ b/project/jni/sdl-1.2/include/SDL_screenkeyboard.h @@ -66,6 +66,7 @@ enum { use SDL_ListModes()[0] to determine the actual screen boundaries. */ extern DECLSPEC int SDLCALL SDL_ANDROID_SetScreenKeyboardButtonPos(int buttonId, SDL_Rect * pos); extern DECLSPEC int SDLCALL SDL_ANDROID_GetScreenKeyboardButtonPos(int buttonId, SDL_Rect * pos); +extern DECLSPEC int SDLCALL SDL_ANDROID_SetScreenKeyboardButtonImagePos(int buttonId, SDL_Rect * pos); extern DECLSPEC int SDLCALL SDL_ANDROID_SetScreenKeyboardButtonKey(int buttonId, #if SDL_VERSION_ATLEAST(1,3,0) diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c index 3581a38d2..f330fe67a 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c @@ -140,8 +140,10 @@ int SDL_ANDROID_CallJavaSwapBuffers() } if( showScreenKeyboardDeferred ) { + jstring s = (*JavaEnv)->NewStringUTF(JavaEnv, showScreenKeyboardOldText); showScreenKeyboardDeferred = 0; - (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard, (*JavaEnv)->NewStringUTF(JavaEnv, showScreenKeyboardOldText), showScreenKeyboardSendBackspace ); + (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard, s, showScreenKeyboardSendBackspace ); + (*JavaEnv)->DeleteLocalRef( JavaEnv, s ); } SDL_ANDROID_ProcessDeferredEvents(); return 1; @@ -280,7 +282,11 @@ void SDL_ANDROID_CallJavaShowScreenKeyboard(const char * oldText, char * outBuf, #endif } else - (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard, (*JavaEnv)->NewStringUTF(JavaEnv, oldText), 0 ); + { + jstring s = (*JavaEnv)->NewStringUTF( JavaEnv, oldText ); + (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard, s, 0 ); + (*JavaEnv)->DeleteLocalRef( JavaEnv, s ); + } while( !SDL_ANDROID_TextInputFinished ) SDL_Delay(100); @@ -312,7 +318,10 @@ int SDL_ANDROID_IsScreenKeyboardShown() void SDL_ANDROID_CallJavaSetScreenKeyboardHintMessage(const char *hint) { - (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaSetScreenKeyboardHintMessage, hint ? (*JavaEnv)->NewStringUTF(JavaEnv, hint) : NULL ); + jstring s = hint ? (*JavaEnv)->NewStringUTF(JavaEnv, hint) : NULL; + (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaSetScreenKeyboardHintMessage, s ); + if( s ) + (*JavaEnv)->DeleteLocalRef( JavaEnv, s ); } void SDL_ANDROID_CallJavaStartAccelerometerGyroscope(int start) diff --git a/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c b/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c index 011950659..5dbfe9b48 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c @@ -973,6 +973,19 @@ int SDL_ANDROID_SetScreenKeyboardButtonPos(int buttonId, SDL_Rect * pos) return 1; }; +int SDLCALL SDL_ANDROID_SetScreenKeyboardButtonImagePos(int buttonId, SDL_Rect * pos) +{ + if( buttonId < 0 || buttonId >= SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM || ! pos ) + return 0; + + if( buttonId == SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD ) + arrowsDraw = *pos; + else + buttonsDraw[buttonId] = *pos; + + return 1; +} + int SDL_ANDROID_GetScreenKeyboardButtonPos(int buttonId, SDL_Rect * pos) { if( buttonId < 0 || buttonId >= SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM || ! pos )