Fixed memleak in JNI code, added API to resize on-screen button image

This commit is contained in:
pelya
2013-03-08 01:47:40 +02:00
parent 984ec70cff
commit c5a14a2dc5
3 changed files with 26 additions and 3 deletions

View File

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

View File

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

View File

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