Fixes for text input

This commit is contained in:
pelya
2010-12-17 09:26:02 +00:00
parent d920a287ee
commit 278506fd45
10 changed files with 112 additions and 232 deletions

View File

@@ -221,11 +221,13 @@ public class MainActivity extends Activity {
synchronized(textInput) {
for(int i = 0; i < text.length(); i++)
{
textInput.addLast((int)text.charAt(i));
textInput.addLast((int)text.codePointAt(i));
DemoRenderer.nativeTextInput( (int)text.charAt(i), (int)text.codePointAt(i) );
//textInput.addLast((int)text.charAt(i));
//textInput.addLast((int)text.codePointAt(i));
}
textInput.addLast(13); // send return
textInput.addLast(13);
DemoRenderer.nativeTextInput( 13, 13 ); // send return
//textInput.addLast(13);
//textInput.addLast(13);
}
}
_videoLayout.removeView(_screenKeyboard);
@@ -253,8 +255,9 @@ public class MainActivity extends Activity {
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_CLEAR))
{
synchronized(textInput) {
textInput.addLast(8); // send backspace keycode
textInput.addLast(8);
DemoRenderer.nativeTextInput( 8, 8 );
//textInput.addLast(8); // send backspace keycode
//textInput.addLast(8);
}
return false; // and proceed to delete text in keyboard input field
}

View File

@@ -227,6 +227,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer {
Settings.SetupTouchscreenKeyboardGraphics(context); // Reload on-screen buttons graphics
}
/*
// Pass just one char per frame, many SDL games cannot handle multiple events in a single frame
synchronized(context.textInput) {
if( context.textInput.size() >= 2 )
@@ -237,6 +238,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer {
context.textInput.removeFirst();
}
}
*/
return 1;
}

View File

@@ -1,198 +0,0 @@
Only in .: acinclude
Only in /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2: Android.mk
Only in .: autogen.sh
Only in .: Borland.html
Only in .: Borland.zip
Only in .: build-scripts
Only in .: configure
Only in .: configure.in
Only in .: CWprojects.sea.bin
Only in .: docs
Only in .: docs.html
Only in /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include: SDL
Only in /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include: SDL_config_android.h
diff -u -r ./include/SDL_config.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include/SDL_config.h
--- ./include/SDL_config.h 2009-10-19 14:51:07.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include/SDL_config.h 2010-05-18 13:09:18.000000000 +0300
@@ -38,6 +38,8 @@
#include "SDL_config_win32.h"
#elif defined(__OS2__)
#include "SDL_config_os2.h"
+#elif defined(ANDROID)
+#include "SDL_config_android.h"
#else
#include "SDL_config_minimal.h"
#endif /* platform config */
diff -u -r ./include/SDL_endian.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include/SDL_endian.h
diff -u -r ./include/SDL_main.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include/SDL_main.h
--- ./include/SDL_main.h 2009-10-13 02:07:19.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include/SDL_main.h 2010-07-26 12:49:30.000000000 +0300
@@ -32,7 +32,7 @@
#if defined(__WIN32__) || \
(defined(__MWERKS__) && !defined(__BEOS__)) || \
defined(__MACOS__) || defined(__MACOSX__) || \
- defined(__SYMBIAN32__) || defined(QWS)
+ defined(__SYMBIAN32__) || defined(QWS) || defined(ANDROID)
#ifdef __cplusplus
#define C_LINKAGE "C"
Only in /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include: SDL_screenkeyboard.h
diff -u -r ./include/SDL_stdinc.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/include/SDL_stdinc.h
Only in .: Makefile.dc
Only in .: Makefile.in
Only in .: Makefile.minimal
Only in .: MPWmake.sea.bin
Only in .: README.AmigaOS
Only in .: README.BeOS
Only in .: README.CVS
Only in .: README.DC
Only in /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2: README.HG
Only in .: README.MacOS
Only in .: README.MacOSX
Only in .: README.MiNT
Only in .: README.NanoX
Only in .: README.NDS
Only in .: README.OS2
Only in .: README.PicoGUI
Only in .: README.PS3
Only in .: README.QNX
Only in .: README.Qtopia
Only in .: README.RISCOS
Only in .: README.SVN
Only in .: README.Symbian
Only in .: README.Watcom
Only in .: README.WinCE
Only in .: README.wscons
Only in .: sdl-1.2-android.diff
Only in .: sdl-config.in
Only in .: sdl.m4
Only in .: sdl.pc.in
Only in .: SDL.qpg.in
Only in .: SDL.spec
Only in .: SDL.spec.in
diff -u -r ./src/audio/alsa/SDL_alsa_audio.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/alsa/SDL_alsa_audio.c
Only in /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio: android
diff -u -r ./src/audio/mint/SDL_mintaudio_it.S /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/mint/SDL_mintaudio_it.S
diff -u -r ./src/audio/pulse/SDL_pulseaudio.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/pulse/SDL_pulseaudio.c
diff -u -r ./src/audio/pulse/SDL_pulseaudio.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/pulse/SDL_pulseaudio.h
diff -u -r ./src/audio/SDL_audio.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/SDL_audio.c
--- ./src/audio/SDL_audio.c 2009-10-13 13:25:35.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/SDL_audio.c 2010-07-15 18:26:48.000000000 +0300
@@ -113,6 +113,9 @@
#if SDL_AUDIO_DRIVER_EPOCAUDIO
&EPOCAudio_bootstrap,
#endif
+#if SDL_AUDIO_DRIVER_ANDROID
+ &ANDROIDAUD_bootstrap,
+#endif
NULL
};
SDL_AudioDevice *current_audio = NULL;
diff -u -r ./src/audio/SDL_audio_c.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/SDL_audio_c.h
diff -u -r ./src/audio/SDL_mixer.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/SDL_mixer.c
diff -u -r ./src/audio/SDL_mixer_m68k.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/SDL_mixer_m68k.c
diff -u -r ./src/audio/SDL_sysaudio.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/SDL_sysaudio.h
--- ./src/audio/SDL_sysaudio.h 2009-10-13 02:07:14.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/SDL_sysaudio.h 2010-07-15 18:22:45.000000000 +0300
@@ -177,6 +179,9 @@
#if SDL_AUDIO_DRIVER_EPOCAUDIO
extern AudioBootStrap EPOCAudio_bootstrap;
#endif
+#if SDL_AUDIO_DRIVER_ANDROID
+extern AudioBootStrap ANDROIDAUD_bootstrap;
+#endif
/* This is the current audio device */
extern SDL_AudioDevice *current_audio;
diff -u -r ./src/audio/windx5/directx.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/audio/windx5/directx.h
diff -u -r ./src/cdrom/mint/SDL_syscdrom.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/cdrom/mint/SDL_syscdrom.c
diff -u -r ./src/cpuinfo/SDL_cpuinfo.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/cpuinfo/SDL_cpuinfo.c
diff -u -r ./src/joystick/bsd/SDL_sysjoystick.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/joystick/bsd/SDL_sysjoystick.c
diff -u -r ./src/joystick/linux/SDL_sysjoystick.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/joystick/linux/SDL_sysjoystick.c
Only in ./src/joystick: os2
diff -u -r ./src/joystick/SDL_joystick.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/joystick/SDL_joystick.c
diff -u -r ./src/stdlib/SDL_iconv.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/stdlib/SDL_iconv.c
diff -u -r ./src/thread/win32/SDL_systhread.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/thread/win32/SDL_systhread.c
diff -u -r ./src/timer/mint/SDL_vbltimer.S /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/timer/mint/SDL_vbltimer.S
Only in /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video: android
diff -u -r ./src/video/ataricommon/SDL_ataric2p.S /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/ataricommon/SDL_ataric2p.S
diff -u -r ./src/video/ataricommon/SDL_ikbdinterrupt.S /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/ataricommon/SDL_ikbdinterrupt.S
diff -u -r ./src/video/ataricommon/SDL_xbiosinterrupt.S /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/ataricommon/SDL_xbiosinterrupt.S
diff -u -r ./src/video/math_private.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/math_private.h
diff -u -r ./src/video/quartz/SDL_QuartzGL.m /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/quartz/SDL_QuartzGL.m
diff -u -r ./src/video/quartz/SDL_QuartzVideo.m /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/quartz/SDL_QuartzVideo.m
diff -u -r ./src/video/quartz/SDL_QuartzWM.m /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/quartz/SDL_QuartzWM.m
diff -u -r ./src/video/SDL_blit.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_blit.c
--- ./src/video/SDL_blit.c 2009-10-13 02:07:15.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_blit.c 2010-07-28 18:58:30.000000000 +0300
@@ -26,6 +26,7 @@
#include "SDL_blit.h"
#include "SDL_RLEaccel_c.h"
#include "SDL_pixels_c.h"
+#include <android/log.h>
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && SDL_ASSEMBLY_ROUTINES
#define MMX_ASMBLIT
@@ -242,6 +243,7 @@
/* Figure out if an accelerated hardware blit is possible */
surface->flags &= ~SDL_HWACCEL;
+ //__android_log_print(ANDROID_LOG_INFO, "libSDL", "SDL_CalculateBlit(): identity %d src hw %d dst hw %d video hw %d", (int)surface->map->identity, (int)(surface->flags & SDL_HWSURFACE), (int)(surface->map->dst->flags & SDL_HWSURFACE), (int)(current_video->info.blit_hw));
if ( surface->map->identity ) {
int hw_blit_ok;
diff -u -r ./src/video/SDL_pixels.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_pixels.c
--- ./src/video/SDL_pixels.c 2009-10-13 02:07:15.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_pixels.c 2010-10-18 12:26:43.000000000 +0300
@@ -304,7 +304,12 @@
default:
break;
}
+
+#ifdef ANDROID
+ if( surface->format->BytesPerPixel != 2 ) /* Avoid extra memcpy() when updating GLES textures */
+#endif
pitch = (pitch + 3) & ~3; /* 4-byte aligning */
+
return(pitch);
}
/*
diff -u -r ./src/video/SDL_sysvideo.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_sysvideo.h
--- ./src/video/SDL_sysvideo.h 2009-10-13 02:07:15.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_sysvideo.h 2010-07-15 18:26:06.000000000 +0300
@@ -410,6 +410,9 @@
#if SDL_VIDEO_DRIVER_CACA
extern VideoBootStrap CACA_bootstrap;
#endif
+#if SDL_VIDEO_DRIVER_ANDROID
+extern VideoBootStrap ANDROID_bootstrap;
+#endif
#if SDL_VIDEO_DRIVER_DUMMY
extern VideoBootStrap DUMMY_bootstrap;
#endif
diff -u -r ./src/video/SDL_video.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_video.c
--- ./src/video/SDL_video.c 2009-10-13 02:07:15.000000000 +0300
+++ /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/SDL_video.c 2010-08-27 15:41:51.000000000 +0300
@@ -126,6 +126,9 @@
#if SDL_VIDEO_DRIVER_CACA
&CACA_bootstrap,
#endif
+#if SDL_VIDEO_DRIVER_ANDROID
+ &ANDROID_bootstrap,
+#endif
#if SDL_VIDEO_DRIVER_DUMMY
&DUMMY_bootstrap,
#endif
diff -u -r ./src/video/wincommon/SDL_sysevents.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/wincommon/SDL_sysevents.c
diff -u -r ./src/video/windib/SDL_dibevents.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/windib/SDL_dibevents.c
diff -u -r ./src/video/windx5/directx.h /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/windx5/directx.h
diff -u -r ./src/video/windx5/SDL_dx5events.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/windx5/SDL_dx5events.c
diff -u -r ./src/video/windx5/SDL_dx5yuv.c /home/pelya/src/endless_space/SDL-android/project/jni/sdl-1.2/src/video/windx5/SDL_dx5yuv.c
Only in .: symbian.zip
Only in .: test
Only in .: VisualCE.zip
Only in .: VisualC.html
Only in .: VisualC.zip
Only in .: Watcom-OS2.zip
Only in .: Watcom-Win32.zip
Only in .: Xcode.tar.gz

View File

@@ -49,7 +49,7 @@ enum {
SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, /* Button to show screen keyboard */
SDL_ANDROID_SCREENKEYBOARD_BUTTON_MAX = SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT
SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM
};
/* All functions return 0 on failure and 1 on success */

View File

@@ -875,6 +875,7 @@ extern void SDL_ANDROID_PumpEvents()
SDL_SendMouseButton( NULL, ev->button.state, ev->button.button );
break;
case SDL_KEYDOWN:
//__android_log_print(ANDROID_LOG_INFO, "libSDL", "SDL_KEYDOWN: %i %i", ev->key.keysym.sym, ev->key.state);
SDL_SendKeyboardKey( ev->key.state, &ev->key.keysym );
break;
case SDL_JOYAXISMOTION:
@@ -1133,8 +1134,63 @@ extern void SDL_ANDROID_MainThreadPushMultitouchMotion(int id, int x, int y, int
SDL_mutexV(BufferedEventsMutex);
#endif
};
#if SDL_VERSION_ATLEAST(1,3,0)
extern void SDL_ANDROID_DeferredTextInput()
{
};
#else
enum { DEFERRED_TEXT_COUNT = 128 };
static struct { int scancode; int unicode; int down; } deferredText[DEFERRED_TEXT_COUNT];
static int deferredTextIdx1 = 0;
static int deferredTextIdx2 = 0;
static SDL_mutex * deferredTextMutex = NULL;
extern void SDL_ANDROID_DeferredTextInput()
{
int count = 2;
if( !deferredTextMutex )
deferredTextMutex = SDL_CreateMutex();
SDL_mutexP(deferredTextMutex);
while( deferredTextIdx1 != deferredTextIdx2 && count > 0 )
{
int nextEvent = getNextEvent();
if( nextEvent == -1 )
{
SDL_mutexV(deferredTextMutex);
return;
}
SDL_Event * ev = &BufferedEvents[BufferedEventsEnd];
deferredTextIdx1++;
if( deferredTextIdx1 >= DEFERRED_TEXT_COUNT )
deferredTextIdx1 = 0;
ev->type = SDL_KEYDOWN;
ev->key.state = deferredText[deferredTextIdx1].down;
ev->key.keysym.scancode = deferredText[deferredTextIdx1].scancode;
ev->key.keysym.sym = deferredText[deferredTextIdx1].scancode;
ev->key.keysym.mod = KMOD_NONE;
ev->key.keysym.unicode = 0;
if ( SDL_TranslateUNICODE )
ev->key.keysym.unicode = deferredText[deferredTextIdx1].unicode;
BufferedEventsEnd = nextEvent;
SDL_mutexV(BufferedEventsMutex);
count --;
}
SDL_mutexV(deferredTextMutex);
};
#endif
extern void SDL_ANDROID_MainThreadPushText( int scancode, int unicode )
{
//__android_log_print(ANDROID_LOG_INFO, "libSDL", "SDL_ANDROID_MainThreadPushText(): %i %i", scancode, unicode);
int nextEvent = getNextEvent();
if( nextEvent == -1 )
return;
@@ -1150,22 +1206,17 @@ extern void SDL_ANDROID_MainThreadPushText( int scancode, int unicode )
#else
ev->type = SDL_KEYDOWN;
ev->key.state = SDL_PRESSED;
ev->key.keysym.scancode = scancode;
ev->key.keysym.sym = scancode;
ev->key.keysym.mod = KMOD_NONE;
ev->key.keysym.unicode = 0;
if ( SDL_TranslateUNICODE )
ev->key.keysym.unicode = unicode;
BufferedEventsEnd = nextEvent;
SDL_mutexV(BufferedEventsMutex);
if( !deferredTextMutex )
deferredTextMutex = SDL_CreateMutex();
nextEvent = getNextEvent();
SDL_mutexP(deferredTextMutex);
ev->type = 0;
if( deferredTextIdx1 == deferredTextIdx2 )
{
SDL_Event * ev = &BufferedEvents[BufferedEventsEnd];
ev->type = SDL_KEYDOWN;
ev->key.state = SDL_RELEASED;
ev->key.state = SDL_PRESSED;
ev->key.keysym.scancode = scancode;
ev->key.keysym.sym = scancode;
ev->key.keysym.mod = KMOD_NONE;
@@ -1173,6 +1224,24 @@ extern void SDL_ANDROID_MainThreadPushText( int scancode, int unicode )
if ( SDL_TranslateUNICODE )
ev->key.keysym.unicode = unicode;
}
else
{
deferredTextIdx2++;
if( deferredTextIdx2 >= DEFERRED_TEXT_COUNT )
deferredTextIdx2 = 0;
deferredText[deferredTextIdx2].down = SDL_PRESSED;
deferredText[deferredTextIdx2].scancode = scancode;
deferredText[deferredTextIdx2].unicode = unicode;
}
deferredTextIdx2++;
if( deferredTextIdx2 >= DEFERRED_TEXT_COUNT )
deferredTextIdx2 = 0;
deferredText[deferredTextIdx2].down = SDL_RELEASED;
deferredText[deferredTextIdx2].scancode = scancode;
deferredText[deferredTextIdx2].unicode = unicode;
SDL_mutexV(deferredTextMutex);
#endif
@@ -1276,7 +1345,7 @@ JAVA_EXPORT_NAME(Settings_nativeSetScreenKbKeyUsed) ( JNIEnv* env, jobject thiz
key = SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD;
if( keynum == 1 )
key = SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT;
if( keynum - 2 > 0 && keynum - 2 < SDL_ANDROID_SCREENKEYBOARD_BUTTON_5 - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0 )
if( keynum - 2 >= 0 && keynum - 2 <= SDL_ANDROID_SCREENKEYBOARD_BUTTON_5 - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0 )
key = keynum - 2 + SDL_ANDROID_SCREENKEYBOARD_BUTTON_0;
if( key >= 0 && !used )

View File

@@ -200,7 +200,6 @@ void ANDROID_GL_DeleteContext (_THIS, SDL_GLContext context)
{
};
SDL_Window * ANDROID_CurrentWindow = NULL;
int ANDROID_CreateWindow(_THIS, SDL_Window * window)
{

View File

@@ -117,6 +117,7 @@ int SDL_ANDROID_CallJavaSwapBuffers()
showScreenKeyboardDeferred = 0;
(*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard );
}
SDL_ANDROID_DeferredTextInput();
return 1;
}
@@ -208,6 +209,10 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeGlContextRecreated) ( JNIEnv* env, jobject
void SDL_ANDROID_CallJavaShowScreenKeyboard()
{
showScreenKeyboardDeferred = 1;
// Move mouse by 1 pixel to force screen update
int x, y;
SDL_GetMouseState( &x, &y );
SDL_ANDROID_MainThreadPushMouseMotion(x > 0 ? x-1 : 0, y);
}
JNIEXPORT void JNICALL

View File

@@ -47,6 +47,7 @@ extern void SDL_ANDROID_processAndroidTrackballDampening();
extern void SDL_ANDROID_processMoveMouseWithKeyboard();
extern int SDL_ANDROID_InsideVideoThread();
extern SDL_VideoDevice *ANDROID_CreateDevice_1_3(int devindex);
extern void SDL_ANDROID_DeferredTextInput();
#if SDL_VERSION_ATLEAST(1,3,0)
extern SDL_Window * ANDROID_CurrentWindow;

View File

@@ -55,7 +55,7 @@ FONT_BTN1 = 4, FONT_BTN2 = 5, FONT_BTN3 = 6, FONT_BTN4 = 7
static GLshort fontGL[sizeof(font)/sizeof(font[0])][FONT_MAX_LINES_PER_CHAR * 4 + 1];
enum { FONT_CHAR_LINES_COUNT = FONT_MAX_LINES_PER_CHAR * 4 };
enum { MAX_BUTTONS = SDL_ANDROID_SCREENKEYBOARD_BUTTON_MAX, MAX_BUTTONS_AUTOFIRE = 2, BUTTON_TEXT_INPUT = SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT } ; // Max amount of custom buttons
enum { MAX_BUTTONS = SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM-1, MAX_BUTTONS_AUTOFIRE = 2, BUTTON_TEXT_INPUT = SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT-1 } ; // Max amount of custom buttons
int SDL_ANDROID_isTouchscreenKeyboardUsed = 0;
static int touchscreenKeyboardTheme = 0;
@@ -70,7 +70,8 @@ SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_1)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_2)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_3)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_4)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_5))
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_5)),
0
};
enum { ARROW_LEFT = 1, ARROW_RIGHT = 2, ARROW_UP = 4, ARROW_DOWN = 8 };
@@ -848,7 +849,7 @@ JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboardButtons) ( JNIEnv* env, jobj
int SDL_ANDROID_SetScreenKeyboardButtonPos(int buttonId, SDL_Rect * pos)
{
if( buttonId < 0 || buttonId > SDL_ANDROID_SCREENKEYBOARD_BUTTON_MAX || ! pos )
if( buttonId < 0 || buttonId >= SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM || ! pos )
return 0;
if( buttonId == SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD )
@@ -876,7 +877,7 @@ int SDL_ANDROID_SetScreenKeyboardButtonPos(int buttonId, SDL_Rect * pos)
int SDL_ANDROID_GetScreenKeyboardButtonPos(int buttonId, SDL_Rect * pos)
{
if( buttonId < 0 || buttonId > SDL_ANDROID_SCREENKEYBOARD_BUTTON_MAX || ! pos )
if( buttonId < 0 || buttonId >= SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM || ! pos )
return 0;
if( buttonId == SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD )
@@ -902,14 +903,12 @@ SDLKey SDL_ANDROID_GetScreenKeyboardButtonKey(int buttonId)
{
if( buttonId < SDL_ANDROID_SCREENKEYBOARD_BUTTON_0 || buttonId > SDL_ANDROID_SCREENKEYBOARD_BUTTON_5 )
return SDLK_UNKNOWN;
if( buttonId == SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD )
return SDLK_UNKNOWN;
return buttonKeysyms[buttonId - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0];
};
int SDL_ANDROID_SetScreenKeyboardAutoFireButtonsAmount(int nbuttons)
{
if( nbuttons < 0 || nbuttons > MAX_BUTTONS_AUTOFIRE )
if( nbuttons < 0 || nbuttons >= MAX_BUTTONS_AUTOFIRE )
return 0;
AutoFireButtonsNum = nbuttons;
return 1;

View File

@@ -13,18 +13,18 @@ Bugs to fix
- Add an option for overlay buttons transparency and button images size.
- Generic keycode remapper.
- Running OpenGL SwapBuffers in a separate thread - huge speed improvement expected.
- Show/hide screen controls with longpress on Text Edit button.
- Zoom and rotate multitouch gestures should return some keycodes.
- Adjustable speed for moving mouse via joystick
- Right click by longpress.
- Mouse buttons assigned to hw buttons only
- Option to calibrate touch area of the screen.
- Option to calibrate touch area of the screen
- Calling SDL_SetVideoMode() with SDL 1.3 makes it crash.
- Calling SDL_SetVideoMode() with SDL 1.3 makes it crash
- Support for NDK r5.
And that's all, I won't be doing any more development or fix other bugs (see bugs.txt for details).