From b0bbe3eff3441dc2b10ae38450b079fba815dd96 Mon Sep 17 00:00:00 2001 From: pelya Date: Sat, 21 Aug 2010 14:52:09 +0300 Subject: [PATCH] Total number of virtual keys has been increased to 7 --- ChangeAppSettings.sh | 12 +- project/sdl/fonteditor/touchscreenfont.h | 23 +++- .../sdl-1.2/src/video/android/javakeycodes.h | 1 + .../src/video/android/SDL_androidinput.c | 10 +- .../src/video/android/SDL_androidinput.h | 11 +- .../src/video/android/SDL_androidvideo.h | 98 ----------------- .../video/android/SDL_touchscreenkeyboard.c | 19 +++- .../sdl-1.3/src/video/android/javakeycodes.h | 103 ++++++++++++++++++ project/src/Globals.java | 2 + project/src/MainActivity.java | 1 - project/src/Settings.java | 2 +- 11 files changed, 171 insertions(+), 111 deletions(-) create mode 120000 project/sdl/sdl-1.2/src/video/android/javakeycodes.h create mode 100644 project/sdl/sdl-1.3/src/video/android/javakeycodes.h diff --git a/ChangeAppSettings.sh b/ChangeAppSettings.sh index 8183a39e1..da4209f97 100755 --- a/ChangeAppSettings.sh +++ b/ChangeAppSettings.sh @@ -1,6 +1,6 @@ #!/bin/sh -CHANGE_APP_SETTINGS_VERSION=2 +CHANGE_APP_SETTINGS_VERSION=3 AUTO= if [ "X$1" = "X-a" ]; then @@ -88,7 +88,7 @@ if [ -n "$var" ] ; then AppUsesMultitouch="$var" fi -echo -n "\nRedefine common keys to SDL keysyms: TOUCHSCREEN SEARCH/CALL/DPAD_CENTER VOLUMEUP VOLUMEDOWN MENU BACK" +echo -n "\nRedefine common keys to SDL keysyms: TOUCHSCREEN SEARCH/CALL/DPAD_CENTER VOLUMEUP VOLUMEDOWN MENU BACK CAMERA ENTER DEL" echo -n "\nMENU and BACK hardware keys and TOUCHSCREEN virtual 'key' are available on all devices, other keys may be absent" echo -n "\nThe same key values are used if touchscreen keyboard is enabled, except for MENU and BACK\n($RedefinedKeys)\n: " read var @@ -96,6 +96,12 @@ if [ -n "$var" ] ; then RedefinedKeys="$var" fi +echo -n "\nNumber of virtual keyboard keys (currently 7 is maximum) ($AppTouchscreenKeyboardKeysAmount): " +read var +if [ -n "$var" ] ; then + AppTouchscreenKeyboardKeysAmount="$var" +fi + echo -n "\nEnable multi-ABI binary, with hardware FPU support - \nit will also work on old devices, but .apk size is 2x bigger (y) or (n) ($MultiABI): " read var if [ -n "$var" ] ; then @@ -171,6 +177,7 @@ echo AppNeedsArrowKeys=$AppNeedsArrowKeys >> AppSettings.cfg echo AppUsesJoystick=$AppUsesJoystick >> AppSettings.cfg echo AppUsesMultitouch=$AppUsesMultitouch >> AppSettings.cfg echo RedefinedKeys=\"$RedefinedKeys\" >> AppSettings.cfg +echo AppTouchscreenKeyboardKeysAmount=$AppTouchscreenKeyboardKeysAmount >> AppSettings.cfg echo MultiABI=$MultiABI >> AppSettings.cfg echo AppVersionCode=$AppVersionCode >> AppSettings.cfg echo AppVersionName=\"$AppVersionName\" >> AppSettings.cfg @@ -277,6 +284,7 @@ cat project/src/Globals.java | \ sed "s/public static boolean AppNeedsArrowKeys = .*;/public static boolean AppNeedsArrowKeys = $AppNeedsArrowKeys;/" | \ sed "s/public static boolean AppUsesJoystick = .*;/public static boolean AppUsesJoystick = $AppUsesJoystick;/" | \ sed "s/public static boolean AppUsesMultitouch = .*;/public static boolean AppUsesMultitouch = $AppUsesMultitouch;/" | \ + sed "s/public static int AppTouchscreenKeyboardKeysAmount = .*;/public static int AppTouchscreenKeyboardKeysAmount = $AppTouchscreenKeyboardKeysAmount;/" | \ sed "s%public static String ReadmeText = .*%public static String ReadmeText = \"$ReadmeText\".replace(\"^\",\"\\\n\");%" | \ sed "s/public LoadLibrary() .*/public LoadLibrary() { $LibrariesToLoad };/" > \ project/src/Globals.java.1 diff --git a/project/sdl/fonteditor/touchscreenfont.h b/project/sdl/fonteditor/touchscreenfont.h index bb666f180..00a620b7d 100644 --- a/project/sdl/fonteditor/touchscreenfont.h +++ b/project/sdl/fonteditor/touchscreenfont.h @@ -4,7 +4,7 @@ #include typedef struct font_line_t { Uint8 x1, y1, x2, y2; } font_line_t; enum { FONT_MAX_LINES_PER_CHAR = 5 }; -font_line_t font[8][FONT_MAX_LINES_PER_CHAR] = { +static font_line_t font[11][FONT_MAX_LINES_PER_CHAR] = { { { 27, 136, 182, 136 }, { 27, 136, 94, 104 }, @@ -60,6 +60,27 @@ font_line_t font[8][FONT_MAX_LINES_PER_CHAR] = { { 189, 74, 189, 180 }, { 189, 180, 74, 190 }, { 0, 0, 0, 0 } + }, + { + { 127, 56, 127, 116 }, + { 69, 119, 186, 115 }, + { 94, 140, 161, 138 }, + { 114, 162, 138, 161 }, + { 0, 0, 0, 0 } + }, + { + { 121, 77, 81, 126 }, + { 81, 126, 119, 178 }, + { 119, 178, 160, 127 }, + { 160, 127, 121, 77 }, + { 0, 0, 0, 0 } + }, + { + { 185, 81, 75, 81 }, + { 75, 81, 124, 158 }, + { 124, 158, 185, 81 }, + { 180, 158, 74, 158 }, + { 0, 0, 0, 0 } } }; #endif diff --git a/project/sdl/sdl-1.2/src/video/android/javakeycodes.h b/project/sdl/sdl-1.2/src/video/android/javakeycodes.h new file mode 120000 index 000000000..b73dc56f0 --- /dev/null +++ b/project/sdl/sdl-1.2/src/video/android/javakeycodes.h @@ -0,0 +1 @@ +../../../../sdl-1.3/src/video/android/javakeycodes.h \ No newline at end of file diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c index 2335b8864..46e5b49f4 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c +++ b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.c @@ -208,9 +208,7 @@ void ANDROID_InitOSKeymap() keymap[KEYCODE_HOME] = SDL_KEY(HOME); // Cannot be used in application - keymap[KEYCODE_ENDCALL] = SDL_KEY(LSHIFT); - keymap[KEYCODE_CAMERA] = SDL_KEY(RSHIFT); - keymap[KEYCODE_POWER] = SDL_KEY(RALT); + keymap[KEYCODE_CAMERA] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_6)); keymap[KEYCODE_0] = SDL_KEY(0); keymap[KEYCODE_1] = SDL_KEY(1); @@ -266,7 +264,7 @@ void ANDROID_InitOSKeymap() keymap[KEYCODE_PERIOD] = SDL_KEY(PERIOD); keymap[KEYCODE_TAB] = SDL_KEY(TAB); keymap[KEYCODE_SPACE] = SDL_KEY(SPACE); - keymap[KEYCODE_DEL] = SDL_KEY(DELETE); + keymap[KEYCODE_DEL] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_8)); keymap[KEYCODE_GRAVE] = SDL_KEY(GRAVE); keymap[KEYCODE_MINUS] = SDL_KEY(KP_MINUS); keymap[KEYCODE_PLUS] = SDL_KEY(KP_PLUS); @@ -303,6 +301,10 @@ void ANDROID_InitOSKeymap() keymap[KEYCODE_FOCUS] = SDL_KEY(F6); keymap[KEYCODE_NOTIFICATION] = SDL_KEY(F7); + // Cannot be received by application, OS internal + keymap[KEYCODE_ENDCALL] = SDL_KEY(LSHIFT); + keymap[KEYCODE_POWER] = SDL_KEY(RALT); + } static float dx = 0.04, dy = 0.1, dz = 0.1; // For accelerometer diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h index 7ed0858a5..1f33cd2c4 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h +++ b/project/sdl/sdl-1.3/src/video/android/SDL_androidinput.h @@ -48,7 +48,7 @@ #include "../SDL_sysvideo.h" #include "SDL_androidvideo.h" - +#include "javakeycodes.h" extern SDLKey SDL_android_keymap[KEYCODE_LAST+1]; @@ -192,5 +192,14 @@ extern int SDL_android_processTouchscreenKeyboard(int x, int y, int action, int #ifndef SDL_ANDROID_KEYCODE_5 #define SDL_ANDROID_KEYCODE_5 ESCAPE #endif +#ifndef SDL_ANDROID_KEYCODE_6 +#define SDL_ANDROID_KEYCODE_6 RSHIFT +#endif +#ifndef SDL_ANDROID_KEYCODE_7 +#define SDL_ANDROID_KEYCODE_7 RETURN +#endif +#ifndef SDL_ANDROID_KEYCODE_8 +#define SDL_ANDROID_KEYCODE_8 DELETE +#endif #endif diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo.h b/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo.h index a2765f4c2..4d674e8f3 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo.h +++ b/project/sdl/sdl-1.3/src/video/android/SDL_androidvideo.h @@ -36,103 +36,5 @@ extern int SDL_ANDROID_drawTouchscreenKeyboard(); extern void SDL_ANDROID_processAndroidTrackballDampening(); extern SDL_VideoDevice *ANDROID_CreateDevice_1_3(int devindex); -// Keycodes ripped from Java SDK -enum KEYCODES_ANDROID -{ -KEYCODE_UNKNOWN = 0, -KEYCODE_SOFT_LEFT = 1, -KEYCODE_SOFT_RIGHT = 2, -KEYCODE_HOME = 3, -KEYCODE_BACK = 4, -KEYCODE_CALL = 5, -KEYCODE_ENDCALL = 6, -KEYCODE_0 = 7, -KEYCODE_1 = 8, -KEYCODE_2 = 9, -KEYCODE_3 = 10, -KEYCODE_4 = 11, -KEYCODE_5 = 12, -KEYCODE_6 = 13, -KEYCODE_7 = 14, -KEYCODE_8 = 15, -KEYCODE_9 = 16, -KEYCODE_STAR = 17, -KEYCODE_POUND = 18, -KEYCODE_DPAD_UP = 19, -KEYCODE_DPAD_DOWN = 20, -KEYCODE_DPAD_LEFT = 21, -KEYCODE_DPAD_RIGHT = 22, -KEYCODE_DPAD_CENTER = 23, -KEYCODE_VOLUME_UP = 24, -KEYCODE_VOLUME_DOWN = 25, -KEYCODE_POWER = 26, -KEYCODE_CAMERA = 27, -KEYCODE_CLEAR = 28, -KEYCODE_A = 29, -KEYCODE_B = 30, -KEYCODE_C = 31, -KEYCODE_D = 32, -KEYCODE_E = 33, -KEYCODE_F = 34, -KEYCODE_G = 35, -KEYCODE_H = 36, -KEYCODE_I = 37, -KEYCODE_J = 38, -KEYCODE_K = 39, -KEYCODE_L = 40, -KEYCODE_M = 41, -KEYCODE_N = 42, -KEYCODE_O = 43, -KEYCODE_P = 44, -KEYCODE_Q = 45, -KEYCODE_R = 46, -KEYCODE_S = 47, -KEYCODE_T = 48, -KEYCODE_U = 49, -KEYCODE_V = 50, -KEYCODE_W = 51, -KEYCODE_X = 52, -KEYCODE_Y = 53, -KEYCODE_Z = 54, -KEYCODE_COMMA = 55, -KEYCODE_PERIOD = 56, -KEYCODE_ALT_LEFT = 57, -KEYCODE_ALT_RIGHT = 58, -KEYCODE_SHIFT_LEFT = 59, -KEYCODE_SHIFT_RIGHT = 60, -KEYCODE_TAB = 61, -KEYCODE_SPACE = 62, -KEYCODE_SYM = 63, -KEYCODE_EXPLORER = 64, -KEYCODE_ENVELOPE = 65, -KEYCODE_ENTER = 66, -KEYCODE_DEL = 67, -KEYCODE_GRAVE = 68, -KEYCODE_MINUS = 69, -KEYCODE_EQUALS = 70, -KEYCODE_LEFT_BRACKET = 71, -KEYCODE_RIGHT_BRACKET = 72, -KEYCODE_BACKSLASH = 73, -KEYCODE_SEMICOLON = 74, -KEYCODE_APOSTROPHE = 75, -KEYCODE_SLASH = 76, -KEYCODE_AT = 77, -KEYCODE_NUM = 78, -KEYCODE_HEADSETHOOK = 79, -KEYCODE_FOCUS = 80, -KEYCODE_PLUS = 81, -KEYCODE_MENU = 82, -KEYCODE_NOTIFICATION = 83, -KEYCODE_SEARCH = 84, -KEYCODE_MEDIA_PLAY_PAUSE= 85, -KEYCODE_MEDIA_STOP = 86, -KEYCODE_MEDIA_NEXT = 87, -KEYCODE_MEDIA_PREVIOUS = 88, -KEYCODE_MEDIA_REWIND = 89, -KEYCODE_MEDIA_FAST_FORWARD = 90, -KEYCODE_MUTE = 91, - -KEYCODE_LAST = KEYCODE_MUTE -}; #endif /* _SDL_androidvideo_h */ diff --git a/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c b/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c index 6248aa4ea..6ef1890a3 100644 --- a/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c +++ b/project/sdl/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c @@ -49,7 +49,7 @@ FONT_LEFT = 0, FONT_RIGHT = 1, FONT_UP = 2, FONT_DOWN = 3, FONT_BTN1 = 4, FONT_BTN2 = 5, FONT_BTN3 = 6, FONT_BTN4 = 7 }; -enum { MAX_BUTTONS = 4 } ; // Max amount of custom buttons +enum { MAX_BUTTONS = 7 } ; // Max amount of custom buttons 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 }; @@ -60,7 +60,11 @@ static SDLKey buttonKeysyms[MAX_BUTTONS] = { SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_0)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_1)), SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_2)), -SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_3)) +SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_3)), +// 4 and 5 are MENU and BACK, always available as HW keys +SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_6)), +SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_7)), +SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_8)) }; enum { ARROW_LEFT = 1, ARROW_RIGHT = 2, ARROW_UP = 4, ARROW_DOWN = 8 }; @@ -332,13 +336,22 @@ JAVA_EXPORT_NAME(Settings_nativeSetupScreenKeyboard) ( JNIEnv* env, jobject thi buttons[0].y = SDL_ANDROID_sWindowHeight - buttons[0].h; // Row of secondary buttons to the upper-right - for( i = 1; i < nbuttons; i++ ) + for( i = 1; i < MIN(nbuttons, 4); i++ ) { buttons[i].w = SDL_ANDROID_sWindowWidth / (nbuttons - 1) / (size + 2); buttons[i].h = SDL_ANDROID_sWindowHeight / (size + 2); buttons[i].x = SDL_ANDROID_sWindowWidth - buttons[i].w * (nbuttons - i); buttons[i].y = 0; } + + // Row of secondary buttons to the upper-left above arrows + for( i = 4; i < MIN(nbuttons, 7); i++ ) + { + buttons[i].w = SDL_ANDROID_sWindowWidth / (nbuttons - 1) / (size + 2); + buttons[i].h = (SDL_ANDROID_sWindowHeight - SDL_ANDROID_sWindowWidth / 2) * 2 / (size + 2); + buttons[i].x = buttons[i].w * (nbuttons - i); + buttons[i].y = 0; + } // Resize char images prepareFontChar(FONT_LEFT, arrows.w / 2, arrows.h / 2); diff --git a/project/sdl/sdl-1.3/src/video/android/javakeycodes.h b/project/sdl/sdl-1.3/src/video/android/javakeycodes.h new file mode 100644 index 000000000..bbf8fc11b --- /dev/null +++ b/project/sdl/sdl-1.3/src/video/android/javakeycodes.h @@ -0,0 +1,103 @@ +#ifndef _JAVA_KEY_CODES_H_ +#define _JAVA_KEY_CODES_H_ + +// Keycodes ripped from Java SDK +enum KEYCODES_ANDROID +{ +KEYCODE_UNKNOWN = 0, +KEYCODE_SOFT_LEFT = 1, +KEYCODE_SOFT_RIGHT = 2, +KEYCODE_HOME = 3, +KEYCODE_BACK = 4, +KEYCODE_CALL = 5, +KEYCODE_ENDCALL = 6, +KEYCODE_0 = 7, +KEYCODE_1 = 8, +KEYCODE_2 = 9, +KEYCODE_3 = 10, +KEYCODE_4 = 11, +KEYCODE_5 = 12, +KEYCODE_6 = 13, +KEYCODE_7 = 14, +KEYCODE_8 = 15, +KEYCODE_9 = 16, +KEYCODE_STAR = 17, +KEYCODE_POUND = 18, +KEYCODE_DPAD_UP = 19, +KEYCODE_DPAD_DOWN = 20, +KEYCODE_DPAD_LEFT = 21, +KEYCODE_DPAD_RIGHT = 22, +KEYCODE_DPAD_CENTER = 23, +KEYCODE_VOLUME_UP = 24, +KEYCODE_VOLUME_DOWN = 25, +KEYCODE_POWER = 26, +KEYCODE_CAMERA = 27, +KEYCODE_CLEAR = 28, +KEYCODE_A = 29, +KEYCODE_B = 30, +KEYCODE_C = 31, +KEYCODE_D = 32, +KEYCODE_E = 33, +KEYCODE_F = 34, +KEYCODE_G = 35, +KEYCODE_H = 36, +KEYCODE_I = 37, +KEYCODE_J = 38, +KEYCODE_K = 39, +KEYCODE_L = 40, +KEYCODE_M = 41, +KEYCODE_N = 42, +KEYCODE_O = 43, +KEYCODE_P = 44, +KEYCODE_Q = 45, +KEYCODE_R = 46, +KEYCODE_S = 47, +KEYCODE_T = 48, +KEYCODE_U = 49, +KEYCODE_V = 50, +KEYCODE_W = 51, +KEYCODE_X = 52, +KEYCODE_Y = 53, +KEYCODE_Z = 54, +KEYCODE_COMMA = 55, +KEYCODE_PERIOD = 56, +KEYCODE_ALT_LEFT = 57, +KEYCODE_ALT_RIGHT = 58, +KEYCODE_SHIFT_LEFT = 59, +KEYCODE_SHIFT_RIGHT = 60, +KEYCODE_TAB = 61, +KEYCODE_SPACE = 62, +KEYCODE_SYM = 63, +KEYCODE_EXPLORER = 64, +KEYCODE_ENVELOPE = 65, +KEYCODE_ENTER = 66, +KEYCODE_DEL = 67, +KEYCODE_GRAVE = 68, +KEYCODE_MINUS = 69, +KEYCODE_EQUALS = 70, +KEYCODE_LEFT_BRACKET = 71, +KEYCODE_RIGHT_BRACKET = 72, +KEYCODE_BACKSLASH = 73, +KEYCODE_SEMICOLON = 74, +KEYCODE_APOSTROPHE = 75, +KEYCODE_SLASH = 76, +KEYCODE_AT = 77, +KEYCODE_NUM = 78, +KEYCODE_HEADSETHOOK = 79, +KEYCODE_FOCUS = 80, +KEYCODE_PLUS = 81, +KEYCODE_MENU = 82, +KEYCODE_NOTIFICATION = 83, +KEYCODE_SEARCH = 84, +KEYCODE_MEDIA_PLAY_PAUSE= 85, +KEYCODE_MEDIA_STOP = 86, +KEYCODE_MEDIA_NEXT = 87, +KEYCODE_MEDIA_PREVIOUS = 88, +KEYCODE_MEDIA_REWIND = 89, +KEYCODE_MEDIA_FAST_FORWARD = 90, +KEYCODE_MUTE = 91, + +KEYCODE_LAST = KEYCODE_MUTE +}; + +#endif diff --git a/project/src/Globals.java b/project/src/Globals.java index 63eb13c3a..0dcbf5dc6 100644 --- a/project/src/Globals.java +++ b/project/src/Globals.java @@ -27,6 +27,8 @@ class Globals { public static boolean AppUsesMultitouch = false; + public static int AppTouchscreenKeyboardKeysAmount = 4; + // Phone-specific config // It will download app data to /sdcard/alienblaster if set to true, // otherwise it will download it to /data/data/de.schwardtnet.alienblaster/files diff --git a/project/src/MainActivity.java b/project/src/MainActivity.java index 5321c2f10..9820d3578 100644 --- a/project/src/MainActivity.java +++ b/project/src/MainActivity.java @@ -27,7 +27,6 @@ public class MainActivity extends Activity { setContentView(_tv); mLoadLibraryStub = new LoadLibrary(); mAudioThread = new AudioThread(this); - Settings.Load(this); } diff --git a/project/src/Settings.java b/project/src/Settings.java index c1f6b08db..66d2a8032 100644 --- a/project/src/Settings.java +++ b/project/src/Settings.java @@ -346,7 +346,7 @@ class Settings if( Globals.UseTouchscreenKeyboard ) { nativeSetTouchscreenKeyboardUsed(); - nativeSetupScreenKeyboard(Globals.TouchscreenKeyboardSize, 4); + nativeSetupScreenKeyboard(Globals.TouchscreenKeyboardSize, Globals.AppTouchscreenKeyboardKeysAmount); } nativeSetAccelerometerSensitivity(Globals.AccelerometerSensitivity); nativeSetTrackballDampening(Globals.TrackballDampening);