Fixes for text input
This commit is contained in:
@@ -221,11 +221,13 @@ public class MainActivity extends Activity {
|
|||||||
synchronized(textInput) {
|
synchronized(textInput) {
|
||||||
for(int i = 0; i < text.length(); i++)
|
for(int i = 0; i < text.length(); i++)
|
||||||
{
|
{
|
||||||
textInput.addLast((int)text.charAt(i));
|
DemoRenderer.nativeTextInput( (int)text.charAt(i), (int)text.codePointAt(i) );
|
||||||
textInput.addLast((int)text.codePointAt(i));
|
//textInput.addLast((int)text.charAt(i));
|
||||||
|
//textInput.addLast((int)text.codePointAt(i));
|
||||||
}
|
}
|
||||||
textInput.addLast(13); // send return
|
DemoRenderer.nativeTextInput( 13, 13 ); // send return
|
||||||
textInput.addLast(13);
|
//textInput.addLast(13);
|
||||||
|
//textInput.addLast(13);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_videoLayout.removeView(_screenKeyboard);
|
_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))
|
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_CLEAR))
|
||||||
{
|
{
|
||||||
synchronized(textInput) {
|
synchronized(textInput) {
|
||||||
textInput.addLast(8); // send backspace keycode
|
DemoRenderer.nativeTextInput( 8, 8 );
|
||||||
textInput.addLast(8);
|
//textInput.addLast(8); // send backspace keycode
|
||||||
|
//textInput.addLast(8);
|
||||||
}
|
}
|
||||||
return false; // and proceed to delete text in keyboard input field
|
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
|
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
|
// Pass just one char per frame, many SDL games cannot handle multiple events in a single frame
|
||||||
synchronized(context.textInput) {
|
synchronized(context.textInput) {
|
||||||
if( context.textInput.size() >= 2 )
|
if( context.textInput.size() >= 2 )
|
||||||
@@ -237,6 +238,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer {
|
|||||||
context.textInput.removeFirst();
|
context.textInput.removeFirst();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return 1;
|
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_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 */
|
/* 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 );
|
SDL_SendMouseButton( NULL, ev->button.state, ev->button.button );
|
||||||
break;
|
break;
|
||||||
case SDL_KEYDOWN:
|
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 );
|
SDL_SendKeyboardKey( ev->key.state, &ev->key.keysym );
|
||||||
break;
|
break;
|
||||||
case SDL_JOYAXISMOTION:
|
case SDL_JOYAXISMOTION:
|
||||||
@@ -1133,8 +1134,63 @@ extern void SDL_ANDROID_MainThreadPushMultitouchMotion(int id, int x, int y, int
|
|||||||
SDL_mutexV(BufferedEventsMutex);
|
SDL_mutexV(BufferedEventsMutex);
|
||||||
#endif
|
#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 )
|
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();
|
int nextEvent = getNextEvent();
|
||||||
if( nextEvent == -1 )
|
if( nextEvent == -1 )
|
||||||
return;
|
return;
|
||||||
@@ -1150,22 +1206,17 @@ extern void SDL_ANDROID_MainThreadPushText( int scancode, int unicode )
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
ev->type = SDL_KEYDOWN;
|
if( !deferredTextMutex )
|
||||||
ev->key.state = SDL_PRESSED;
|
deferredTextMutex = SDL_CreateMutex();
|
||||||
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);
|
|
||||||
|
|
||||||
nextEvent = getNextEvent();
|
SDL_mutexP(deferredTextMutex);
|
||||||
|
|
||||||
|
ev->type = 0;
|
||||||
|
|
||||||
|
if( deferredTextIdx1 == deferredTextIdx2 )
|
||||||
{
|
{
|
||||||
SDL_Event * ev = &BufferedEvents[BufferedEventsEnd];
|
|
||||||
ev->type = SDL_KEYDOWN;
|
ev->type = SDL_KEYDOWN;
|
||||||
ev->key.state = SDL_RELEASED;
|
ev->key.state = SDL_PRESSED;
|
||||||
ev->key.keysym.scancode = scancode;
|
ev->key.keysym.scancode = scancode;
|
||||||
ev->key.keysym.sym = scancode;
|
ev->key.keysym.sym = scancode;
|
||||||
ev->key.keysym.mod = KMOD_NONE;
|
ev->key.keysym.mod = KMOD_NONE;
|
||||||
@@ -1173,6 +1224,24 @@ extern void SDL_ANDROID_MainThreadPushText( int scancode, int unicode )
|
|||||||
if ( SDL_TranslateUNICODE )
|
if ( SDL_TranslateUNICODE )
|
||||||
ev->key.keysym.unicode = unicode;
|
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
|
#endif
|
||||||
|
|
||||||
@@ -1276,7 +1345,7 @@ JAVA_EXPORT_NAME(Settings_nativeSetScreenKbKeyUsed) ( JNIEnv* env, jobject thiz
|
|||||||
key = SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD;
|
key = SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD;
|
||||||
if( keynum == 1 )
|
if( keynum == 1 )
|
||||||
key = SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT;
|
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;
|
key = keynum - 2 + SDL_ANDROID_SCREENKEYBOARD_BUTTON_0;
|
||||||
|
|
||||||
if( key >= 0 && !used )
|
if( key >= 0 && !used )
|
||||||
|
|||||||
@@ -200,7 +200,6 @@ void ANDROID_GL_DeleteContext (_THIS, SDL_GLContext context)
|
|||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
SDL_Window * ANDROID_CurrentWindow = NULL;
|
SDL_Window * ANDROID_CurrentWindow = NULL;
|
||||||
int ANDROID_CreateWindow(_THIS, SDL_Window * window)
|
int ANDROID_CreateWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ int SDL_ANDROID_CallJavaSwapBuffers()
|
|||||||
showScreenKeyboardDeferred = 0;
|
showScreenKeyboardDeferred = 0;
|
||||||
(*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard );
|
(*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard );
|
||||||
}
|
}
|
||||||
|
SDL_ANDROID_DeferredTextInput();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,6 +209,10 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeGlContextRecreated) ( JNIEnv* env, jobject
|
|||||||
void SDL_ANDROID_CallJavaShowScreenKeyboard()
|
void SDL_ANDROID_CallJavaShowScreenKeyboard()
|
||||||
{
|
{
|
||||||
showScreenKeyboardDeferred = 1;
|
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
|
JNIEXPORT void JNICALL
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ extern void SDL_ANDROID_processAndroidTrackballDampening();
|
|||||||
extern void SDL_ANDROID_processMoveMouseWithKeyboard();
|
extern void SDL_ANDROID_processMoveMouseWithKeyboard();
|
||||||
extern int SDL_ANDROID_InsideVideoThread();
|
extern int SDL_ANDROID_InsideVideoThread();
|
||||||
extern SDL_VideoDevice *ANDROID_CreateDevice_1_3(int devindex);
|
extern SDL_VideoDevice *ANDROID_CreateDevice_1_3(int devindex);
|
||||||
|
extern void SDL_ANDROID_DeferredTextInput();
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(1,3,0)
|
#if SDL_VERSION_ATLEAST(1,3,0)
|
||||||
extern SDL_Window * ANDROID_CurrentWindow;
|
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];
|
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 { 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;
|
int SDL_ANDROID_isTouchscreenKeyboardUsed = 0;
|
||||||
static int touchscreenKeyboardTheme = 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_2)),
|
||||||
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_3)),
|
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_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 };
|
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)
|
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;
|
return 0;
|
||||||
|
|
||||||
if( buttonId == SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD )
|
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)
|
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;
|
return 0;
|
||||||
|
|
||||||
if( buttonId == SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD )
|
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 )
|
if( buttonId < SDL_ANDROID_SCREENKEYBOARD_BUTTON_0 || buttonId > SDL_ANDROID_SCREENKEYBOARD_BUTTON_5 )
|
||||||
return SDLK_UNKNOWN;
|
return SDLK_UNKNOWN;
|
||||||
if( buttonId == SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD )
|
|
||||||
return SDLK_UNKNOWN;
|
|
||||||
return buttonKeysyms[buttonId - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0];
|
return buttonKeysyms[buttonId - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0];
|
||||||
};
|
};
|
||||||
|
|
||||||
int SDL_ANDROID_SetScreenKeyboardAutoFireButtonsAmount(int nbuttons)
|
int SDL_ANDROID_SetScreenKeyboardAutoFireButtonsAmount(int nbuttons)
|
||||||
{
|
{
|
||||||
if( nbuttons < 0 || nbuttons > MAX_BUTTONS_AUTOFIRE )
|
if( nbuttons < 0 || nbuttons >= MAX_BUTTONS_AUTOFIRE )
|
||||||
return 0;
|
return 0;
|
||||||
AutoFireButtonsNum = nbuttons;
|
AutoFireButtonsNum = nbuttons;
|
||||||
return 1;
|
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.
|
- 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.
|
- Show/hide screen controls with longpress on Text Edit button.
|
||||||
|
|
||||||
- Zoom and rotate multitouch gestures should return some keycodes.
|
- 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).
|
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