Multitouch gestures
This commit is contained in:
@@ -81,8 +81,11 @@ class Globals {
|
||||
public static int ClickScreenPressure = 0;
|
||||
public static int ClickScreenTouchspotSize = 0;
|
||||
public static int RemapHwKeycode[] = new int[SDL_Keys.JAVA_KEYCODE_LAST];
|
||||
public static int RemapScreenKbKeycode[] = new int[10];
|
||||
public static boolean ScreenKbControlsShown[] = new boolean[12];
|
||||
public static int RemapScreenKbKeycode[] = new int[6];
|
||||
public static boolean ScreenKbControlsShown[] = new boolean[8]; /* Also joystick and text input button added */
|
||||
public static int RemapMultitouchGestureKeycode[] = new int[4];
|
||||
public static boolean MultitouchGesturesUsed[] = new boolean[4];
|
||||
public static int MultitouchGestureSensitivity = 1;
|
||||
}
|
||||
|
||||
class LoadLibrary {
|
||||
|
||||
@@ -77,6 +77,13 @@ class Settings
|
||||
out.writeBoolean(Globals.ScreenKbControlsShown[i]);
|
||||
}
|
||||
out.writeInt(Globals.TouchscreenKeyboardTransparency);
|
||||
out.writeInt(Globals.RemapMultitouchGestureKeycode.length);
|
||||
for( int i = 0; i < Globals.RemapMultitouchGestureKeycode.length; i++ )
|
||||
{
|
||||
out.writeInt(Globals.RemapMultitouchGestureKeycode[i]);
|
||||
out.writeBoolean(Globals.MultitouchGesturesUsed[i]);
|
||||
}
|
||||
out.writeInt(Globals.MultitouchGestureSensitivity);
|
||||
|
||||
out.close();
|
||||
settingsLoaded = true;
|
||||
@@ -114,10 +121,19 @@ class Settings
|
||||
}
|
||||
Globals.ScreenKbControlsShown[0] = Globals.AppNeedsArrowKeys;
|
||||
Globals.ScreenKbControlsShown[1] = Globals.AppNeedsTextInput;
|
||||
for( int i = 2; i < 8; i++ )
|
||||
for( int i = 2; i < Globals.ScreenKbControlsShown.length; i++ )
|
||||
Globals.ScreenKbControlsShown[i] = ( i - 2 < Globals.AppTouchscreenKeyboardKeysAmount );
|
||||
for( int i = 8; i < 12; i++ )
|
||||
Globals.ScreenKbControlsShown[i] = true;
|
||||
for( int i = 0; i < Globals.RemapMultitouchGestureKeycode.length; i++ )
|
||||
{
|
||||
int sdlKey = nativeGetKeymapKeyMultitouchGesture(i);
|
||||
int idx = 0;
|
||||
for(int ii = 0; ii < SDL_Keys.values.length; ii++)
|
||||
if(SDL_Keys.values[ii] == sdlKey)
|
||||
idx = ii;
|
||||
Globals.RemapMultitouchGestureKeycode[i] = idx;
|
||||
}
|
||||
for( int i = 0; i < Globals.MultitouchGesturesUsed.length; i++ )
|
||||
Globals.MultitouchGesturesUsed[i] = true;
|
||||
|
||||
try {
|
||||
ObjectInputStream settingsFile = new ObjectInputStream(new FileInputStream( p.getFilesDir().getAbsolutePath() + "/" + SettingsFileName ));
|
||||
@@ -163,6 +179,14 @@ class Settings
|
||||
Globals.ScreenKbControlsShown[i] = settingsFile.readBoolean();
|
||||
}
|
||||
Globals.TouchscreenKeyboardTransparency = settingsFile.readInt();
|
||||
if( settingsFile.readInt() != Globals.RemapMultitouchGestureKeycode.length )
|
||||
throw new IOException();
|
||||
for( int i = 0; i < Globals.RemapMultitouchGestureKeycode.length; i++ )
|
||||
{
|
||||
Globals.RemapMultitouchGestureKeycode[i] = settingsFile.readInt();
|
||||
Globals.MultitouchGesturesUsed[i] = settingsFile.readBoolean();
|
||||
}
|
||||
Globals.MultitouchGestureSensitivity = settingsFile.readInt();
|
||||
|
||||
settingsLoaded = true;
|
||||
|
||||
@@ -240,6 +264,8 @@ class Settings
|
||||
|
||||
items.add(p.getResources().getString(R.string.remap_hwkeys));
|
||||
|
||||
items.add(p.getResources().getString(R.string.remap_screenkb_button_gestures));
|
||||
|
||||
items.add(p.getResources().getString(R.string.ok));
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(p);
|
||||
@@ -303,6 +329,10 @@ class Settings
|
||||
showRemapHwKeysConfig(p);
|
||||
selected++;
|
||||
|
||||
if( item == selected )
|
||||
showScreenGesturesConfig(p);
|
||||
selected++;
|
||||
|
||||
if( item == selected )
|
||||
{
|
||||
Save(p);
|
||||
@@ -1073,13 +1103,6 @@ class Settings
|
||||
p.getResources().getString(R.string.remap_screenkb_button) + " 4",
|
||||
p.getResources().getString(R.string.remap_screenkb_button) + " 5",
|
||||
p.getResources().getString(R.string.remap_screenkb_button) + " 6",
|
||||
// Not implemented yet!
|
||||
/*
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomin),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomout),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateright),
|
||||
*/
|
||||
};
|
||||
|
||||
boolean defaults[] = {
|
||||
@@ -1091,39 +1114,8 @@ class Settings
|
||||
Globals.ScreenKbControlsShown[5],
|
||||
Globals.ScreenKbControlsShown[6],
|
||||
Globals.ScreenKbControlsShown[7],
|
||||
// Not implemented yet!
|
||||
/*
|
||||
Globals.ScreenKbControlsShown[8],
|
||||
Globals.ScreenKbControlsShown[9],
|
||||
Globals.ScreenKbControlsShown[10],
|
||||
Globals.ScreenKbControlsShown[11],
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
if( ! Globals.UseTouchscreenKeyboard )
|
||||
{
|
||||
for( int i = 0; i < 8; i++ )
|
||||
Globals.ScreenKbControlsShown[i] = false;
|
||||
|
||||
CharSequence[] items2 = {
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomin),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomout),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateright),
|
||||
};
|
||||
|
||||
boolean defaults2[] = {
|
||||
Globals.ScreenKbControlsShown[8],
|
||||
Globals.ScreenKbControlsShown[9],
|
||||
Globals.ScreenKbControlsShown[10],
|
||||
Globals.ScreenKbControlsShown[11],
|
||||
};
|
||||
|
||||
items = items2;
|
||||
defaults = defaults2;
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(p);
|
||||
builder.setTitle(p.getResources().getString(R.string.remap_screenkb));
|
||||
builder.setMultiChoiceItems(items, defaults, new DialogInterface.OnMultiChoiceClickListener()
|
||||
@@ -1158,16 +1150,9 @@ class Settings
|
||||
p.getResources().getString(R.string.remap_screenkb_button) + " 4",
|
||||
p.getResources().getString(R.string.remap_screenkb_button) + " 5",
|
||||
p.getResources().getString(R.string.remap_screenkb_button) + " 6",
|
||||
// Not implemented yet!
|
||||
/*
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomin),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomout),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateright),
|
||||
*/
|
||||
};
|
||||
|
||||
if( currentButton >= items.length ) // Globals.RemapScreenKbKeycode.length )
|
||||
if( currentButton >= Globals.RemapScreenKbKeycode.length )
|
||||
{
|
||||
showScreenKeyboardConfigMainMenu(p);
|
||||
return;
|
||||
@@ -1194,6 +1179,108 @@ class Settings
|
||||
alert.setOwnerActivity(p);
|
||||
alert.show();
|
||||
}
|
||||
|
||||
static void showScreenGesturesConfig(final MainActivity p)
|
||||
{
|
||||
CharSequence[] items = {
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomin),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomout),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateright),
|
||||
};
|
||||
|
||||
boolean defaults[] = {
|
||||
Globals.MultitouchGesturesUsed[0],
|
||||
Globals.MultitouchGesturesUsed[1],
|
||||
Globals.MultitouchGesturesUsed[2],
|
||||
Globals.MultitouchGesturesUsed[3],
|
||||
};
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(p);
|
||||
builder.setTitle(p.getResources().getString(R.string.remap_screenkb_button_gestures));
|
||||
builder.setMultiChoiceItems(items, defaults, new DialogInterface.OnMultiChoiceClickListener()
|
||||
{
|
||||
public void onClick(DialogInterface dialog, int item, boolean isChecked)
|
||||
{
|
||||
Globals.MultitouchGesturesUsed[item] = isChecked;
|
||||
}
|
||||
});
|
||||
builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener()
|
||||
{
|
||||
public void onClick(DialogInterface dialog, int item)
|
||||
{
|
||||
dialog.dismiss();
|
||||
showScreenGesturesConfig2(p);
|
||||
}
|
||||
});
|
||||
|
||||
AlertDialog alert = builder.create();
|
||||
alert.setOwnerActivity(p);
|
||||
alert.show();
|
||||
}
|
||||
|
||||
static void showScreenGesturesConfig2(final MainActivity p)
|
||||
{
|
||||
final CharSequence[] items = {
|
||||
p.getResources().getString(R.string.accel_slow),
|
||||
p.getResources().getString(R.string.accel_medium),
|
||||
p.getResources().getString(R.string.accel_fast),
|
||||
p.getResources().getString(R.string.accel_veryfast)
|
||||
};
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(p);
|
||||
builder.setTitle(R.string.remap_screenkb_button_gestures_sensitivity);
|
||||
builder.setSingleChoiceItems(items, Globals.MultitouchGestureSensitivity, new DialogInterface.OnClickListener()
|
||||
{
|
||||
public void onClick(DialogInterface dialog, int item)
|
||||
{
|
||||
Globals.MultitouchGestureSensitivity = item;
|
||||
|
||||
dialog.dismiss();
|
||||
showScreenGesturesConfig3(p, 0);
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.setOwnerActivity(p);
|
||||
alert.show();
|
||||
}
|
||||
|
||||
static void showScreenGesturesConfig3(final MainActivity p, final int currentButton)
|
||||
{
|
||||
CharSequence[] items = {
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomin),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_zoomout),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
|
||||
p.getResources().getString(R.string.remap_screenkb_button_rotateright),
|
||||
};
|
||||
|
||||
if( currentButton >= Globals.RemapMultitouchGestureKeycode.length )
|
||||
{
|
||||
showConfigMainMenu(p);
|
||||
return;
|
||||
}
|
||||
if( ! Globals.MultitouchGesturesUsed[currentButton] )
|
||||
{
|
||||
showScreenGesturesConfig3(p, currentButton + 1);
|
||||
return;
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(p);
|
||||
builder.setTitle(items[currentButton]);
|
||||
builder.setSingleChoiceItems(SDL_Keys.names, Globals.RemapMultitouchGestureKeycode[currentButton], new DialogInterface.OnClickListener()
|
||||
{
|
||||
public void onClick(DialogInterface dialog, int item)
|
||||
{
|
||||
Globals.RemapMultitouchGestureKeycode[currentButton] = item;
|
||||
|
||||
dialog.dismiss();
|
||||
showScreenGesturesConfig3(p, currentButton + 1);
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.setOwnerActivity(p);
|
||||
alert.show();
|
||||
}
|
||||
|
||||
// ===============================================================================================
|
||||
|
||||
@@ -1229,18 +1316,15 @@ class Settings
|
||||
}
|
||||
SetupTouchscreenKeyboardGraphics(p);
|
||||
for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ )
|
||||
{
|
||||
nativeSetKeymapKey(i, SDL_Keys.values[Globals.RemapHwKeycode[i]]);
|
||||
}
|
||||
|
||||
for( int i = 0; i < Globals.ScreenKbControlsShown.length; i++ )
|
||||
{
|
||||
nativeSetScreenKbKeyUsed(i, Globals.ScreenKbControlsShown[i] ? 1 : 0);
|
||||
}
|
||||
for( int i = 0; i < Globals.RemapScreenKbKeycode.length; i++ )
|
||||
{
|
||||
nativeSetKeymapKeyScreenKb(i, SDL_Keys.values[Globals.RemapScreenKbKeycode[i]]);
|
||||
}
|
||||
for( int i = 0; i < Globals.RemapMultitouchGestureKeycode.length; i++ )
|
||||
nativeSetKeymapKeyMultitouchGesture(i, Globals.MultitouchGesturesUsed[i] ? SDL_Keys.values[Globals.RemapMultitouchGestureKeycode[i]] : 0);
|
||||
nativeSetMultitouchGestureSensitivity(Globals.MultitouchGestureSensitivity);
|
||||
|
||||
String lang = new String(Locale.getDefault().getLanguage());
|
||||
if( Locale.getDefault().getCountry().length() > 0 )
|
||||
@@ -1297,11 +1381,14 @@ class Settings
|
||||
private static native void nativeSetupScreenKeyboard(int size, int theme, int nbuttonsAutoFire, int transparency);
|
||||
private static native void nativeSetupScreenKeyboardButtons(byte[] img);
|
||||
private static native void nativeInitKeymap();
|
||||
private static native int nativeGetKeymapKey(int key);
|
||||
private static native int nativeGetKeymapKey(int key);
|
||||
private static native void nativeSetKeymapKey(int javakey, int key);
|
||||
private static native int nativeGetKeymapKeyScreenKb(int keynum);
|
||||
private static native int nativeGetKeymapKeyScreenKb(int keynum);
|
||||
private static native void nativeSetKeymapKeyScreenKb(int keynum, int key);
|
||||
private static native void nativeSetScreenKbKeyUsed(int keynum, int used);
|
||||
public static native void nativeSetEnv(final String name, final String value);
|
||||
private static native int nativeGetKeymapKeyMultitouchGesture(int keynum);
|
||||
private static native void nativeSetKeymapKeyMultitouchGesture(int keynum, int key);
|
||||
private static native void nativeSetMultitouchGestureSensitivity(int sensitivity);
|
||||
public static native void nativeSetEnv(final String name, final String value);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,4 +79,26 @@
|
||||
<string name="pointandclick_joystickmousespeed">Bewegen Sie die Maus mit Joystick-Geschwindigkeit</string>
|
||||
<string name="pointandclick_joystickmouseaccel">Bewegen Sie die Maus mit Joystick-Beschleunigung</string>
|
||||
<string name="none">Keine</string>
|
||||
<string name="controls_screenkb_transparency">On-Screen-Tastatur Transparenz</string>
|
||||
<string name="controls_screenkb_trans_0">Nicht sichtbar</string>
|
||||
<string name="controls_screenkb_trans_1">Fast unsichtbar</string>
|
||||
<string name="controls_screenkb_trans_2">Transparente</string>
|
||||
<string name="controls_screenkb_trans_3">Semi-transparent</string>
|
||||
<string name="controls_screenkb_trans_4">Non-transparent</string>
|
||||
<string name="mouse_emulation">Maus-Emulation</string>
|
||||
<string name="measurepressure">Kalibrieren Touchscreen Druck</string>
|
||||
<string name="remap_hwkeys">Remap physischen Tasten</string>
|
||||
<string name="remap_hwkeys_press">Drücken Sie eine beliebige Taste außer HOME und POWER, können Sie Lautstärke-Tasten</string>
|
||||
<string name="remap_hwkeys_select">Wählen Sie SDL Schlüsselcode</string>
|
||||
<string name="remap_screenkb">Remap On-Screen-Steuerung</string>
|
||||
<string name="remap_screenkb_joystick">On-Screen-Joystick</string>
|
||||
<string name="remap_screenkb_button">On-Screen-Taste</string>
|
||||
<string name="remap_screenkb_button_text">On-Screen-Texteingabe-Taste</string>
|
||||
<string name="remap_screenkb_button_zoomin">Zoom in Zwei-Finger-Geste</string>
|
||||
<string name="remap_screenkb_button_zoomout">Verkleinern Zwei-Finger-Geste</string>
|
||||
<string name="remap_screenkb_button_rotateleft">Nach links drehen Zwei-Finger-Geste</string>
|
||||
<string name="remap_screenkb_button_rotateright">Nach rechts drehen Zwei-Finger-Geste</string>
|
||||
<string name="remap_screenkb_button_gestures">Zwei-Finger-Gesten</string>
|
||||
<string name="accel_veryfast">Sehr schnell</string>
|
||||
<string name="remap_screenkb_button_gestures_sensitivity">Zwei-Finger-Gesten Bildschirm Empfindlichkeit</string>
|
||||
</resources>
|
||||
|
||||
@@ -79,4 +79,26 @@
|
||||
<string name="pointandclick_joystickmousespeed">Siirrä hiiri ohjainta nopeasti</string>
|
||||
<string name="pointandclick_joystickmouseaccel">Siirrä hiiri ohjainta kiihtyvyys</string>
|
||||
<string name="none">Ei</string>
|
||||
<string name="controls_screenkb_transparency">Näyttönäppäimistöllä avoimuutta</string>
|
||||
<string name="controls_screenkb_trans_0">Näkymätön</string>
|
||||
<string name="controls_screenkb_trans_1">Lähes näkymätön</string>
|
||||
<string name="controls_screenkb_trans_2">Läpinäkyvä</string>
|
||||
<string name="controls_screenkb_trans_3">Semi-avoimet</string>
|
||||
<string name="controls_screenkb_trans_4">Ei-läpinäkyvä</string>
|
||||
<string name="mouse_emulation">Hiiren emulointi</string>
|
||||
<string name="measurepressure">Kalibroi kosketusnäyttö paine</string>
|
||||
<string name="remap_hwkeys">Remap fyysiset näppäimet</string>
|
||||
<string name="remap_hwkeys_press">Paina mitä tahansa näppäintä paitsi koti-ja POWER, voit käyttää äänenvoimakkuusnäppäimiä</string>
|
||||
<string name="remap_hwkeys_select">Valitse SDL näppäinkoodien</string>
|
||||
<string name="remap_screenkb">Remap näytön valvonnan</string>
|
||||
<string name="remap_screenkb_joystick">Näytöllä ohjainta</string>
|
||||
<string name="remap_screenkb_button">Ruutunäyttöpainike</string>
|
||||
<string name="remap_screenkb_button_text">Näytön tekstin tulopainiketta</string>
|
||||
<string name="remap_screenkb_button_zoomin">Suurenna kahden sormen elettä</string>
|
||||
<string name="remap_screenkb_button_zoomout">Pienennä kahden sormen elettä</string>
|
||||
<string name="remap_screenkb_button_rotateleft">Kierrä vasemmalle kahden sormen elettä</string>
|
||||
<string name="remap_screenkb_button_rotateright">Kierrä oikealle kahden sormen elettä</string>
|
||||
<string name="remap_screenkb_button_gestures">Kahden sormen eleitä</string>
|
||||
<string name="accel_veryfast">Erittäin nopea</string>
|
||||
<string name="remap_screenkb_button_gestures_sensitivity">Kahden sormen näytön eleet herkkyys</string>
|
||||
</resources>
|
||||
|
||||
@@ -82,4 +82,26 @@
|
||||
<string name="pointandclick_joystickmousespeed">Déplacez la souris avec la vitesse joystick</string>
|
||||
<string name="pointandclick_joystickmouseaccel">Déplacez la souris avec une accélération joystick</string>
|
||||
<string name="none">Aucun</string>
|
||||
<string name="controls_screenkb_transparency">Sur la transparence du clavier à l\u0026#39;écran</string>
|
||||
<string name="controls_screenkb_trans_0">Invisible</string>
|
||||
<string name="controls_screenkb_trans_1">Presque invisible</string>
|
||||
<string name="controls_screenkb_trans_2">Transparent</string>
|
||||
<string name="controls_screenkb_trans_3">Semi-transparent</string>
|
||||
<string name="controls_screenkb_trans_4">Non-transparent</string>
|
||||
<string name="mouse_emulation">l\u0026#39;émulation de la souris</string>
|
||||
<string name="measurepressure">Calibrer la pression tactile</string>
|
||||
<string name="remap_hwkeys">Reconfigurer les touches physiques</string>
|
||||
<string name="remap_hwkeys_press">Appuyez sur n\u0026#39;importe quelle touche sauf HOME et POWER, vous pouvez utiliser les touches de volume</string>
|
||||
<string name="remap_hwkeys_select">Sélectionnez SDL keycode</string>
|
||||
<string name="remap_screenkb">Reconfigurer les contrôles à l\u0026#39;écran</string>
|
||||
<string name="remap_screenkb_joystick">Le joystick à l\u0026#39;écran</string>
|
||||
<string name="remap_screenkb_button">Le bouton à l\u0026#39;écran</string>
|
||||
<string name="remap_screenkb_button_text">Sur l\u0026#39;écran de saisie de texte bouton</string>
|
||||
<string name="remap_screenkb_button_zoomin">Zoom sur deux doigts geste</string>
|
||||
<string name="remap_screenkb_button_zoomout">Zoom sur deux doigts geste</string>
|
||||
<string name="remap_screenkb_button_rotateleft">Tournez à gauche geste de deux doigts</string>
|
||||
<string name="remap_screenkb_button_rotateright">Tournez à droite geste de deux doigts</string>
|
||||
<string name="remap_screenkb_button_gestures">Deux doigts gestes</string>
|
||||
<string name="accel_veryfast">Très rapide</string>
|
||||
<string name="remap_screenkb_button_gestures_sensitivity">Deux doigts écran gestes sensibilité</string>
|
||||
</resources>
|
||||
|
||||
@@ -72,4 +72,26 @@
|
||||
<string name="pointandclick_joystickmousespeed">Перемещение мыши джойстиком - скорость</string>
|
||||
<string name="pointandclick_joystickmouseaccel">Перемещение мыши джойстиком - ускорение</string>
|
||||
<string name="none">Нет</string>
|
||||
<string name="controls_screenkb_transparency">О прозрачности клавиатура-экран</string>
|
||||
<string name="controls_screenkb_trans_0">Невидимый</string>
|
||||
<string name="controls_screenkb_trans_1">Почти невидимый</string>
|
||||
<string name="controls_screenkb_trans_2">Прозрачный</string>
|
||||
<string name="controls_screenkb_trans_3">Полупрозрачные</string>
|
||||
<string name="controls_screenkb_trans_4">Непрозрачные</string>
|
||||
<string name="mouse_emulation">Эмуляции мыши</string>
|
||||
<string name="measurepressure">Калибровка сенсорного давления</string>
|
||||
<string name="remap_hwkeys">Переназначение физических клавиш</string>
|
||||
<string name="remap_hwkeys_press">Нажмите любую клавишу, кроме HOME и POWER, вы можете использовать клавиши регулировки громкости</string>
|
||||
<string name="remap_hwkeys_select">Выберите код кнопки SDL</string>
|
||||
<string name="remap_screenkb">Переназначение экранных кнопок</string>
|
||||
<string name="remap_screenkb_joystick">Экранный джойстик</string>
|
||||
<string name="remap_screenkb_button">Экранные кнопки</string>
|
||||
<string name="remap_screenkb_button_text">Экранная кнопка ввода текста</string>
|
||||
<string name="remap_screenkb_button_zoomin">Увеличить двумя пальцами жест</string>
|
||||
<string name="remap_screenkb_button_zoomout">Уменьшить двумя пальцами жест</string>
|
||||
<string name="remap_screenkb_button_rotateleft">Повернуть налево двумя пальцами жест</string>
|
||||
<string name="remap_screenkb_button_rotateright">Повернуть вправо двумя пальцами жест</string>
|
||||
<string name="remap_screenkb_button_gestures">Жест двумя пальцами по экрану</string>
|
||||
<string name="accel_veryfast">Очень быстро</string>
|
||||
<string name="remap_screenkb_button_gestures_sensitivity">Чувствительность жеста двумя пальцами по экрану</string>
|
||||
</resources>
|
||||
|
||||
@@ -72,4 +72,26 @@
|
||||
<string name="pointandclick_joystickmousespeed">Переміщення миші джойстиком - швидкiсть</string>
|
||||
<string name="pointandclick_joystickmouseaccel">Переміщення миші джойстиком - прискорення</string>
|
||||
<string name="none">Немає</string>
|
||||
<string name="controls_screenkb_transparency">Про прозорість клавіатура-екран</string>
|
||||
<string name="controls_screenkb_trans_0">Невидимий</string>
|
||||
<string name="controls_screenkb_trans_1">Майже невидимий</string>
|
||||
<string name="controls_screenkb_trans_2">Прозорий</string>
|
||||
<string name="controls_screenkb_trans_3">Напівпрозорі</string>
|
||||
<string name="controls_screenkb_trans_4">Непрозорі</string>
|
||||
<string name="mouse_emulation">Емуляція миші</string>
|
||||
<string name="measurepressure">Калібрування сенсорного натискання</string>
|
||||
<string name="remap_hwkeys">Перепризначення фізичних кнопок</string>
|
||||
<string name="remap_hwkeys_press">Натисніть будь-яку клавішу, крім HOME і POWER, ви можете використовувати клавіші регулювання гучності</string>
|
||||
<string name="remap_hwkeys_select">Виберіть код кнопки SDL</string>
|
||||
<string name="remap_screenkb">Перепризначення наекранних кнопок</string>
|
||||
<string name="remap_screenkb_joystick">Наекранний джойстік</string>
|
||||
<string name="remap_screenkb_button">Наекранні кнопки</string>
|
||||
<string name="remap_screenkb_button_text">Наекранна кнопка вводу тексту</string>
|
||||
<string name="remap_screenkb_button_zoomin">Збільшити двома пальцями жест</string>
|
||||
<string name="remap_screenkb_button_zoomout">Зменшити двома пальцями жест</string>
|
||||
<string name="remap_screenkb_button_rotateleft">Повернути наліво двома пальцями жест</string>
|
||||
<string name="remap_screenkb_button_rotateright">Повернути праворуч двома пальцями жест</string>
|
||||
<string name="remap_screenkb_button_gestures">Жест двома пальцями по екрану</string>
|
||||
<string name="accel_veryfast">Дуже швидко</string>
|
||||
<string name="remap_screenkb_button_gestures_sensitivity">Чутливість жесту двома пальцями по екрану</string>
|
||||
</resources>
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
<string name="trackball_slow">Slow</string>
|
||||
<string name="trackball_question">Trackball dampening</string>
|
||||
|
||||
<string name="accel_veryfast">Very fast</string>
|
||||
<string name="accel_fast">Fast</string>
|
||||
<string name="accel_medium">Medium</string>
|
||||
<string name="accel_slow">Slow</string>
|
||||
@@ -106,6 +107,8 @@
|
||||
<string name="remap_screenkb_joystick">On-screen joystick</string>
|
||||
<string name="remap_screenkb_button">On-screen button</string>
|
||||
<string name="remap_screenkb_button_text">On-screen text input button</string>
|
||||
<string name="remap_screenkb_button_gestures">Two-finger screen gestures</string>
|
||||
<string name="remap_screenkb_button_gestures_sensitivity">Two-finger screen gestures sensitivity</string>
|
||||
<string name="remap_screenkb_button_zoomin">Zoom in two-finger gesture</string>
|
||||
<string name="remap_screenkb_button_zoomout">Zoom out two-finger gesture</string>
|
||||
<string name="remap_screenkb_button_rotateleft">Rotate left two-finger gesture</string>
|
||||
|
||||
@@ -17,10 +17,10 @@ AppUsesJoystick=n
|
||||
AppHandlesJoystickSensitivity=n
|
||||
AppUsesMultitouch=n
|
||||
NonBlockingSwapBuffers=n
|
||||
RedefinedKeys="SPACE RETURN"
|
||||
RedefinedKeys="SPACE"
|
||||
AppTouchscreenKeyboardKeysAmount=6
|
||||
AppTouchscreenKeyboardKeysAmountAutoFire=2
|
||||
RedefinedKeysScreenKb="SPACE RETURN"
|
||||
RedefinedKeysScreenKb="1 2 3 4 5 6 1 2 3 4"
|
||||
MultiABI=n
|
||||
AppVersionCode=101
|
||||
AppVersionName="1.01"
|
||||
|
||||
@@ -460,9 +460,6 @@ int main(int argc, char* argv[])
|
||||
SDL_Rect r;
|
||||
if(SDL_PollEvent(&event) > 0)
|
||||
{
|
||||
if(event.type == SDL_MOUSEBUTTONDOWN)
|
||||
break;
|
||||
|
||||
if(event.type & (SDL_KEYUP | SDL_KEYDOWN))
|
||||
{
|
||||
Uint8 *keys = SDL_GetKeyState(&i);
|
||||
|
||||
@@ -1 +1 @@
|
||||
opentyrian
|
||||
ballfield
|
||||
33
project/jni/sdl-1.2/src/video/android/atan2i.h
Normal file
33
project/jni/sdl-1.2/src/video/android/atan2i.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#ifndef __ATAN2I_H__
|
||||
#define __ATAN2I_H__
|
||||
#include <math.h>
|
||||
|
||||
// Fast arctan2, returns angle in radians as integer, with fractional part in lower 16 bits
|
||||
// Stolen from http://www.dspguru.com/dsp/tricks/fixed-point-atan2-with-self-normalization , precision is said to be 0.07 rads
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
enum { atan2i_coeff_1 = ((int)(M_PI*65536.0/4)), atan2i_coeff_2 = (3*atan2i_coeff_1), atan2i_PI = (int)(M_PI * 65536.0) };
|
||||
|
||||
static inline int atan2i(int y, int x)
|
||||
{
|
||||
int angle;
|
||||
int abs_y = abs(y);
|
||||
if( abs_y == 0 )
|
||||
abs_y = 1;
|
||||
if (x>=0)
|
||||
{
|
||||
angle = atan2i_coeff_1 - atan2i_coeff_1 * (x - abs_y) / (x + abs_y);
|
||||
}
|
||||
else
|
||||
{
|
||||
angle = atan2i_coeff_2 - atan2i_coeff_1 * (x + abs_y) / (abs_y - x);
|
||||
}
|
||||
if (y < 0)
|
||||
return(-angle); // negate if in quad III or IV
|
||||
else
|
||||
return(angle);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "SDL_androidinput.h"
|
||||
#include "SDL_screenkeyboard.h"
|
||||
#include "jniwrapperstuff.h"
|
||||
#include "atan2i.h"
|
||||
|
||||
|
||||
static SDLKey SDL_android_keymap[KEYCODE_LAST+1];
|
||||
@@ -53,7 +54,6 @@ static inline SDL_scancode TranslateKey(int scancode)
|
||||
return SDL_android_keymap[scancode];
|
||||
}
|
||||
|
||||
|
||||
static int isTrackballUsed = 0;
|
||||
static int isMouseUsed = 0;
|
||||
|
||||
@@ -81,7 +81,19 @@ static Uint32 lastTrackballAction = 0;
|
||||
enum { TOUCH_PTR_UP = 0, TOUCH_PTR_MOUSE = 1, TOUCH_PTR_SCREENKB = 2 };
|
||||
int touchPointers[MAX_MULTITOUCH_POINTERS] = {0};
|
||||
int firstMousePointerId = -1;
|
||||
|
||||
enum { MAX_MULTITOUCH_GESTURES = 4 };
|
||||
int multitouchGestureKeycode[MAX_MULTITOUCH_GESTURES] = {
|
||||
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_6)),
|
||||
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_7)),
|
||||
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_8)),
|
||||
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_9))
|
||||
};
|
||||
int multitouchGestureKeyPressed[MAX_MULTITOUCH_GESTURES] = { 0, 0, 0, 0 };
|
||||
int multitouchGestureSensitivity = 0;
|
||||
int multitouchGestureDist = -1;
|
||||
int multitouchGestureAngle = 0;
|
||||
int multitouchGestureX = -1;
|
||||
int multitouchGestureY = -1;
|
||||
|
||||
static inline int InsideRect(const SDL_Rect * r, int x, int y)
|
||||
{
|
||||
@@ -196,12 +208,111 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeMouse) ( JNIEnv* env, jobject thiz, j
|
||||
|
||||
x = x * SDL_ANDROID_sFakeWindowWidth / SDL_ANDROID_sWindowWidth;
|
||||
y = y * SDL_ANDROID_sFakeWindowHeight / SDL_ANDROID_sWindowHeight;
|
||||
if( x < 0 )
|
||||
x = 0;
|
||||
if( x > SDL_ANDROID_sWindowWidth )
|
||||
x = SDL_ANDROID_sWindowWidth;
|
||||
if( y < 0 )
|
||||
y = 0;
|
||||
if( y > SDL_ANDROID_sWindowHeight )
|
||||
y = SDL_ANDROID_sWindowHeight;
|
||||
|
||||
#endif
|
||||
|
||||
if( action == MOUSE_UP )
|
||||
{
|
||||
multitouchGestureX = -1;
|
||||
multitouchGestureY = -1;
|
||||
multitouchGestureDist = -1;
|
||||
for(i = 0; i < MAX_MULTITOUCH_GESTURES; i++)
|
||||
{
|
||||
if( multitouchGestureKeyPressed[i] )
|
||||
{
|
||||
multitouchGestureKeyPressed[i] = 0;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, multitouchGestureKeycode[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( firstMousePointerId != pointerId )
|
||||
{
|
||||
multitouchGestureX = x;
|
||||
multitouchGestureY = y;
|
||||
}
|
||||
if( firstMousePointerId == pointerId && multitouchGestureX >= 0 )
|
||||
{
|
||||
int dist = abs( x - multitouchGestureX ) + abs( y - multitouchGestureY );
|
||||
int angle = atan2i( y - multitouchGestureY, x - multitouchGestureX );
|
||||
if( multitouchGestureDist < 0 )
|
||||
{
|
||||
multitouchGestureDist = dist;
|
||||
multitouchGestureAngle = angle;
|
||||
}
|
||||
else
|
||||
{
|
||||
int distMaxDiff = SDL_ANDROID_sFakeWindowHeight / ( 1 + (1 + multitouchGestureSensitivity) * 2 );
|
||||
int angleMaxDiff = atan2i_PI / ( 1 + (1 + multitouchGestureSensitivity) * 2 );
|
||||
if( dist - multitouchGestureDist > distMaxDiff )
|
||||
{
|
||||
multitouchGestureKeyPressed[0] = 1;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, multitouchGestureKeycode[0] );
|
||||
}
|
||||
else
|
||||
if( multitouchGestureKeyPressed[0] )
|
||||
{
|
||||
multitouchGestureKeyPressed[0] = 0;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, multitouchGestureKeycode[0] );
|
||||
}
|
||||
if( multitouchGestureDist - dist > distMaxDiff )
|
||||
{
|
||||
multitouchGestureKeyPressed[1] = 1;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, multitouchGestureKeycode[1] );
|
||||
}
|
||||
else
|
||||
if( multitouchGestureKeyPressed[1] )
|
||||
{
|
||||
multitouchGestureKeyPressed[1] = 0;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, multitouchGestureKeycode[1] );
|
||||
}
|
||||
|
||||
int angleDiff = angle - multitouchGestureAngle;
|
||||
|
||||
while( angleDiff < atan2i_PI )
|
||||
angleDiff += atan2i_PI * 2;
|
||||
while( angleDiff > atan2i_PI )
|
||||
angleDiff -= atan2i_PI * 2;
|
||||
|
||||
if( angleDiff < -angleMaxDiff )
|
||||
{
|
||||
multitouchGestureKeyPressed[2] = 1;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, multitouchGestureKeycode[2] );
|
||||
}
|
||||
else
|
||||
if( multitouchGestureKeyPressed[2] )
|
||||
{
|
||||
multitouchGestureKeyPressed[2] = 0;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, multitouchGestureKeycode[2] );
|
||||
}
|
||||
if( angleDiff > angleMaxDiff )
|
||||
{
|
||||
multitouchGestureKeyPressed[3] = 1;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, multitouchGestureKeycode[3] );
|
||||
}
|
||||
else
|
||||
if( multitouchGestureKeyPressed[3] )
|
||||
{
|
||||
multitouchGestureKeyPressed[3] = 0;
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, multitouchGestureKeycode[3] );
|
||||
}
|
||||
__android_log_print(ANDROID_LOG_INFO, "libSDL", "x %d y %d multitouchGestureX %d multitouchGestureY %d dist %d multitouchGestureDist %d angle %08X multitouchGestureAngle %08X angleDiff %09d",
|
||||
x, y, multitouchGestureX, multitouchGestureY, dist, multitouchGestureDist, angle, multitouchGestureAngle, angleDiff );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( isMultitouchUsed )
|
||||
{
|
||||
|
||||
#if SDL_VERSION_ATLEAST(1,3,0)
|
||||
// Use nifty SDL 1.3 multitouch API
|
||||
if( action == MOUSE_MOVE )
|
||||
@@ -223,7 +334,7 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeMouse) ( JNIEnv* env, jobject thiz, j
|
||||
{
|
||||
SDL_keysym keysym;
|
||||
if( action != MOUSE_MOVE )
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( action == MOUSE_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_0)) );
|
||||
SDL_ANDROID_MainThreadPushKeyboardKey( action == MOUSE_DOWN ? SDL_PRESSED : SDL_RELEASED, SDL_ANDROID_GetScreenKeyboardButtonKey(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0) );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1314,7 +1425,7 @@ JAVA_EXPORT_NAME(Settings_nativeSetKeymapKey) ( JNIEnv* env, jobject thiz, jint
|
||||
SDL_android_keymap[javakey] = key;
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
JNIEXPORT jint JNICALL
|
||||
JAVA_EXPORT_NAME(Settings_nativeGetKeymapKeyScreenKb) ( JNIEnv* env, jobject thiz, jint keynum)
|
||||
{
|
||||
if( keynum < 0 || keynum > SDL_ANDROID_SCREENKEYBOARD_BUTTON_5 - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0 + 4 )
|
||||
@@ -1352,6 +1463,29 @@ JAVA_EXPORT_NAME(Settings_nativeSetScreenKbKeyUsed) ( JNIEnv* env, jobject thiz
|
||||
SDL_ANDROID_SetScreenKeyboardButtonPos(key, &rect);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
JAVA_EXPORT_NAME(Settings_nativeGetKeymapKeyMultitouchGesture) ( JNIEnv* env, jobject thiz, jint keynum)
|
||||
{
|
||||
if( keynum < 0 || keynum >= MAX_MULTITOUCH_GESTURES )
|
||||
return SDL_KEY(UNKNOWN);
|
||||
return multitouchGestureKeycode[keynum];
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
JAVA_EXPORT_NAME(Settings_nativeSetKeymapKeyMultitouchGesture) ( JNIEnv* env, jobject thiz, jint keynum, jint keycode)
|
||||
{
|
||||
if( keynum < 0 || keynum >= MAX_MULTITOUCH_GESTURES )
|
||||
return SDL_KEY(UNKNOWN);
|
||||
multitouchGestureKeycode[keynum] = keycode;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
JAVA_EXPORT_NAME(Settings_nativeSetMultitouchGestureSensitivity) ( JNIEnv* env, jobject thiz, jint sensitivity)
|
||||
{
|
||||
multitouchGestureSensitivity = sensitivity;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
JAVA_EXPORT_NAME(Settings_nativeInitKeymap) ( JNIEnv* env, jobject thiz )
|
||||
{
|
||||
|
||||
@@ -890,7 +890,6 @@ int SDL_ANDROID_SetScreenKeyboardButtonKey(int buttonId, SDLKey key)
|
||||
{
|
||||
if( buttonId < SDL_ANDROID_SCREENKEYBOARD_BUTTON_0 || buttonId > SDL_ANDROID_SCREENKEYBOARD_BUTTON_5 || ! key )
|
||||
return 0;
|
||||
__android_log_print(ANDROID_LOG_INFO, "libSDL", "SetScreenKeyboardButtonKey(): %d %d", buttonId - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, key);
|
||||
buttonKeysyms[buttonId - SDL_ANDROID_SCREENKEYBOARD_BUTTON_0] = key;
|
||||
return 1;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user