SDL keycodes now can be redefined by user

This commit is contained in:
pelya
2010-12-10 16:42:55 +00:00
parent d40771de0d
commit 658bec6205
8 changed files with 63 additions and 31 deletions

View File

@@ -15,5 +15,5 @@ if ( grep "package $AppFullName;" project/src/Globals.java > /dev/null && [ "`re
touch project/src/Globals.java touch project/src/Globals.java
fi fi
cd project && env PATH=$NDKBUILDPATH nice -n10 ndk-build -j2 V=1 && ant `test -n "$1" && echo release || echo debug` && test -z "$1" && cd bin && adb install -r DemoActivity-debug.apk cd project && env PATH=$NDKBUILDPATH nice -n10 ndk-build -j4 V=1 && ant `test -n "$1" && echo release || echo debug` && test -z "$1" && cd bin && adb install -r DemoActivity-debug.apk

View File

@@ -81,8 +81,7 @@ class Globals {
public static boolean KeepAspectRatio = false; public static boolean KeepAspectRatio = false;
public static int ClickScreenPressure = 0; public static int ClickScreenPressure = 0;
public static int ClickScreenTouchspotSize = 0; public static int ClickScreenTouchspotSize = 0;
public static Vector<Integer> RemapHwKeycodeJava = new Vector<Integer>(); public static int RemapHwKeycode[] = new int[SDL_Keys.JAVA_KEYCODE_LAST];
public static Vector<Integer> RemapHwKeycodeSdl = new Vector<Integer>();
} }
class LoadLibrary { class LoadLibrary {

View File

@@ -495,6 +495,8 @@ class SDL_Keys
{ {
public static String [] names = null; public static String [] names = null;
public static Integer [] values = null; public static Integer [] values = null;
static final JAVA_KEYCODE_LAST = android.view.KeyEvent.KEYCODE_MUTE; // = 91
static static
{ {

View File

@@ -34,7 +34,7 @@ public class MainActivity extends Activity {
// fullscreen mode // fullscreen mode
requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); WindowManager.LayoutParams.FLAG_FULLSCREEN);
if(Globals.InhibitSuspend) if(Globals.InhibitSuspend)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
@@ -77,7 +77,7 @@ public class MainActivity extends Activity {
if(mAudioThread == null) // Starting from background (should not happen) if(mAudioThread == null) // Starting from background (should not happen)
{ {
System.out.println("libSDL: Loading libraries"); System.out.println("libSDL: Loading libraries");
mLoadLibraryStub = new LoadLibrary(); mLoadLibraryStub = new LoadLibrary();
mAudioThread = new AudioThread(this); mAudioThread = new AudioThread(this);
System.out.println("libSDL: Loading settings"); System.out.println("libSDL: Loading settings");

View File

@@ -59,6 +59,11 @@ class Settings
out.writeBoolean(Globals.KeepAspectRatio); out.writeBoolean(Globals.KeepAspectRatio);
out.writeInt(Globals.MoveMouseWithJoystickSpeed); out.writeInt(Globals.MoveMouseWithJoystickSpeed);
out.writeInt(Globals.MoveMouseWithJoystickAccel); out.writeInt(Globals.MoveMouseWithJoystickAccel);
out.writeInt(SDL_Keys.JAVA_KEYCODE_LAST);
for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ )
{
out.writeInt(RemapHwKeycode[i]);
}
out.close(); out.close();
settingsLoaded = true; settingsLoaded = true;
@@ -75,6 +80,11 @@ class Settings
return; return;
} }
System.out.println("libSDL: Settings.Load(): enter"); System.out.println("libSDL: Settings.Load(): enter");
nativeInitKeymap();
for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ )
{
RemapHwKeycode[i] = nativeGetKeymapKey(i);
}
try { try {
ObjectInputStream settingsFile = new ObjectInputStream(new FileInputStream( p.getFilesDir().getAbsolutePath() + "/" + SettingsFileName )); ObjectInputStream settingsFile = new ObjectInputStream(new FileInputStream( p.getFilesDir().getAbsolutePath() + "/" + SettingsFileName ));
Globals.DownloadToSdcard = settingsFile.readBoolean(); Globals.DownloadToSdcard = settingsFile.readBoolean();
@@ -101,6 +111,12 @@ class Settings
Globals.KeepAspectRatio = settingsFile.readBoolean(); Globals.KeepAspectRatio = settingsFile.readBoolean();
Globals.MoveMouseWithJoystickSpeed = settingsFile.readInt(); Globals.MoveMouseWithJoystickSpeed = settingsFile.readInt();
Globals.MoveMouseWithJoystickAccel = settingsFile.readInt(); Globals.MoveMouseWithJoystickAccel = settingsFile.readInt();
if( settingsFile.readInt() != SDL_Keys.JAVA_KEYCODE_LAST )
throw new IOException();
for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ )
{
RemapHwKeycode[i] = settingsFile.readInt();
}
settingsLoaded = true; settingsLoaded = true;
@@ -845,27 +861,20 @@ class Settings
public void onKeyEvent(final int keyCode) public void onKeyEvent(final int keyCode)
{ {
p.keyRemapTool = null; p.keyRemapTool = null;
int keyIndex = -1; int keyIndex = keyCode;
for( int i = 0; i < Globals.RemapHwKeycodeJava.size(); i++ ) if( keyIndex < 0 )
{ keyIndex = 0;
if( Globals.RemapHwKeycodeJava.get(i) == keyCode ) if( keyIndex > SDL_Keys.JAVA_KEYCODE_LAST )
keyIndex = i; keyIndex = 0;
}
if( keyIndex == -1 )
{
keyIndex = Globals.RemapHwKeycodeJava.size();
Globals.RemapHwKeycodeJava.add(keyCode);
Globals.RemapHwKeycodeSdl.add(0); // SDLK_UNKNOWN
}
final int KeyIndexFinal = keyIndex; final int KeyIndexFinal = keyIndex;
AlertDialog.Builder builder = new AlertDialog.Builder(p); AlertDialog.Builder builder = new AlertDialog.Builder(p);
builder.setTitle(R.string.remap_hwkeys_select); builder.setTitle(R.string.remap_hwkeys_select);
builder.setSingleChoiceItems(SDL_Keys.names, Globals.RemapHwKeycodeSdl.get(keyIndex), new DialogInterface.OnClickListener() builder.setSingleChoiceItems(SDL_Keys.names, Globals.RemapHwKeycode[keyIndex], new DialogInterface.OnClickListener()
{ {
public void onClick(DialogInterface dialog, int item) public void onClick(DialogInterface dialog, int item)
{ {
Globals.RemapHwKeycodeSdl.set(KeyIndexFinal, item); Globals.RemapHwKeycode[KeyIndexFinal] = item;
dialog.dismiss(); dialog.dismiss();
showConfigMainMenu(p); showConfigMainMenu(p);
@@ -910,6 +919,11 @@ class Settings
Globals.AppNeedsTextInput ? 1 : 0 ); Globals.AppNeedsTextInput ? 1 : 0 );
} }
SetupTouchscreenKeyboardGraphics(p); SetupTouchscreenKeyboardGraphics(p);
for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ )
{
nativeSetKeymapKey(i, RemapHwKeycode[i]);
}
String lang = new String(Locale.getDefault().getLanguage()); String lang = new String(Locale.getDefault().getLanguage());
if( Locale.getDefault().getCountry().length() > 0 ) if( Locale.getDefault().getCountry().length() > 0 )
lang = lang + "_" + Locale.getDefault().getCountry(); lang = lang + "_" + Locale.getDefault().getCountry();
@@ -960,6 +974,9 @@ class Settings
private static native void nativeSetTouchscreenKeyboardUsed(); private static native void nativeSetTouchscreenKeyboardUsed();
private static native void nativeSetupScreenKeyboard(int size, int theme, int nbuttons, int nbuttonsAutoFire, int showArrows, int showTextInput); private static native void nativeSetupScreenKeyboard(int size, int theme, int nbuttons, int nbuttonsAutoFire, int showArrows, int showTextInput);
private static native void nativeSetupScreenKeyboardButtons(byte[] img); private static native void nativeSetupScreenKeyboardButtons(byte[] img);
private static native void nativeInitKeymap();
private static native int nativeGetKeymapKey(int key);
private static native void nativeSetKeymapKey(int javakey, int key);
public static native void nativeSetEnv(final String name, final String value); public static native void nativeSetEnv(final String name, final String value);
} }

View File

@@ -21,8 +21,8 @@ RedefinedKeys="LCTRL m t h e"
AppTouchscreenKeyboardKeysAmount=0 AppTouchscreenKeyboardKeysAmount=0
AppTouchscreenKeyboardKeysAmountAutoFire=0 AppTouchscreenKeyboardKeysAmountAutoFire=0
MultiABI=n MultiABI=n
AppVersionCode=211405 AppVersionCode=212506
AppVersionName="2114.05" AppVersionName="2125.06"
CompiledLibraries="sdl_net sdl_mixer sdl_image sdl_ttf png intl" CompiledLibraries="sdl_net sdl_mixer sdl_image sdl_ttf png intl"
CustomBuildScript=n CustomBuildScript=n
AppCflags='-finline-functions -O2 -DWITH_ZLIB -DWITH_MIXER -DWITH_XML -DWITH_IMAGE -DWITH_TTF' AppCflags='-finline-functions -O2 -DWITH_ZLIB -DWITH_MIXER -DWITH_XML -DWITH_IMAGE -DWITH_TTF'

View File

@@ -1 +1 @@
glxgears fheroes2

View File

@@ -1202,12 +1202,8 @@ void SDL_ANDROID_processMoveMouseWithKeyboard()
SDL_ANDROID_MainThreadPushMouseMotion(moveMouseWithKbX, moveMouseWithKbY); SDL_ANDROID_MainThreadPushMouseMotion(moveMouseWithKbX, moveMouseWithKbY);
}; };
void ANDROID_InitOSKeymap() void ANDROID_InitOSKeymap()
{ {
int i;
SDLKey * keymap = SDL_android_keymap;
#if (SDL_VERSION_ATLEAST(1,3,0)) #if (SDL_VERSION_ATLEAST(1,3,0))
SDLKey defaultKeymap[SDL_NUM_SCANCODES]; SDLKey defaultKeymap[SDL_NUM_SCANCODES];
SDL_GetDefaultKeymap(defaultKeymap); SDL_GetDefaultKeymap(defaultKeymap);
@@ -1229,8 +1225,30 @@ void ANDROID_InitOSKeymap()
touch.id = 0; touch.id = 0;
SDL_AddTouch(&touch, "Android touch screen"); SDL_AddTouch(&touch, "Android touch screen");
#endif #endif
}
JNIEXPORT jint JNICALL
JAVA_EXPORT_NAME(Settings_nativeGetKeymapKey) ( JNIEnv* env, jobject thiz, jint code)
{
if( code < 0 || code > KEYCODE_LAST )
return SDL_KEY(UNKNOWN);
return SDL_android_keymap[code];
}
JNIEXPORT void JNICALL
JAVA_EXPORT_NAME(Settings_nativeSetKeymapKey) ( JNIEnv* env, jobject thiz, jint javakey, jint key)
{
if( javakey < 0 || javakey > KEYCODE_LAST )
return;
SDL_android_keymap[javakey] = key;
}
JNIEXPORT void JNICALL
JAVA_EXPORT_NAME(Settings_nativeInitKeymap) ( JNIEnv* env, jobject thiz )
{
int i;
SDLKey * keymap = SDL_android_keymap;
// TODO: keys are mapped rather randomly // TODO: keys are mapped rather randomly
@@ -1241,16 +1259,12 @@ void ANDROID_InitOSKeymap()
keymap[KEYCODE_BACK] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_5)); keymap[KEYCODE_BACK] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_5));
// TODO: make this configurable
keymap[KEYCODE_MENU] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_4)); keymap[KEYCODE_MENU] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_4));
keymap[KEYCODE_DPAD_CENTER] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_1)); keymap[KEYCODE_DPAD_CENTER] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_1));
keymap[KEYCODE_SEARCH] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_9)); keymap[KEYCODE_SEARCH] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_9));
keymap[KEYCODE_CALL] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_10)); keymap[KEYCODE_CALL] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_10));
//keymap[KEYCODE_CALL] = SDL_KEY(RCTRL);
//keymap[KEYCODE_DPAD_CENTER] = SDL_KEY(LALT);
keymap[KEYCODE_VOLUME_UP] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_2)); keymap[KEYCODE_VOLUME_UP] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_2));
keymap[KEYCODE_VOLUME_DOWN] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_3)); keymap[KEYCODE_VOLUME_DOWN] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_3));