Fixes for text input
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -200,7 +200,6 @@ void ANDROID_GL_DeleteContext (_THIS, SDL_GLContext context)
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
SDL_Window * ANDROID_CurrentWindow = NULL;
|
||||
int ANDROID_CreateWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
10
todo.txt
10
todo.txt
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user