Fixed memleak in JNI code, added API to resize on-screen button image
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 )
|
||||
|
||||
Reference in New Issue
Block a user