mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 05:38:56 +00:00
ANDROID: Fix shifted keys and key combos
This commit is contained in:
parent
5118c76ce0
commit
87a76f4a56
@ -20,6 +20,7 @@ import android.net.wifi.WifiManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.SystemClock;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
@ -51,6 +52,7 @@ import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
@ -147,6 +149,7 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
|
||||
public boolean shift = false;
|
||||
public boolean alt = false;
|
||||
public final TreeSet<Integer> stickyKeys = new TreeSet<>();
|
||||
public long mEventTime = -1;
|
||||
|
||||
public BuiltInKeyboardView(Context context, android.util.AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
@ -162,6 +165,76 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getCompiledMetaState() {
|
||||
int retCompiledMetaState = 0;
|
||||
// search in the list of currently "ON" sticky keys to set the meta flags
|
||||
for (int stickyActiveKeyCode : stickyKeys) {
|
||||
switch (stickyActiveKeyCode) {
|
||||
case KeyEvent.KEYCODE_SHIFT_LEFT:
|
||||
retCompiledMetaState|= KeyEvent.META_SHIFT_LEFT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_SHIFT_RIGHT:
|
||||
retCompiledMetaState|= KeyEvent.META_SHIFT_RIGHT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_CTRL_LEFT:
|
||||
retCompiledMetaState|= KeyEvent.META_CTRL_LEFT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_CTRL_RIGHT:
|
||||
retCompiledMetaState|= KeyEvent.META_CTRL_RIGHT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_ALT_LEFT:
|
||||
retCompiledMetaState|= KeyEvent.META_ALT_LEFT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_ALT_RIGHT:
|
||||
retCompiledMetaState|= KeyEvent.META_ALT_RIGHT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_META_LEFT:
|
||||
retCompiledMetaState|= KeyEvent.META_META_LEFT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_META_RIGHT:
|
||||
retCompiledMetaState|= KeyEvent.META_META_RIGHT_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_CAPS_LOCK:
|
||||
retCompiledMetaState|= KeyEvent.META_CAPS_LOCK_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_NUM_LOCK:
|
||||
retCompiledMetaState|= KeyEvent.META_NUM_LOCK_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_SCROLL_LOCK:
|
||||
retCompiledMetaState|= KeyEvent.META_SCROLL_LOCK_ON;
|
||||
break;
|
||||
case KeyEvent.KEYCODE_SYM:
|
||||
// TODO Do we have or need a SYM key?
|
||||
retCompiledMetaState|= KeyEvent.META_SYM_ON;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
if (shift && !alt) {
|
||||
retCompiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
|
||||
}
|
||||
return retCompiledMetaState;
|
||||
}
|
||||
|
||||
public void recheckStickyKeys() {
|
||||
// setting sticky keys to their proper on or off state
|
||||
// h
|
||||
boolean atLeastOneStickyKeyWasChanged = false;
|
||||
for (CustomKeyboard.CustomKey k: getKeyboard().getKeys()) {
|
||||
if (stickyKeys.contains(k.codes[0]) && !k.on) {
|
||||
k.on = true;
|
||||
atLeastOneStickyKeyWasChanged = true;
|
||||
} else if (!stickyKeys.contains(k.codes[0]) && k.sticky && k.on) {
|
||||
k.on = false;
|
||||
atLeastOneStickyKeyWasChanged = true;
|
||||
}
|
||||
}
|
||||
if (atLeastOneStickyKeyWasChanged) {
|
||||
invalidateAllKeys();
|
||||
}
|
||||
}
|
||||
|
||||
public void ChangeKeyboard() {
|
||||
// Called when bringing up the keyboard
|
||||
// or pressing one of the special keyboard keys that change the layout (eg "123...")
|
||||
@ -170,12 +243,12 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
|
||||
setKeyboard(new CustomKeyboard(ScummVMActivity.this, TextInputKeyboardList[idx][keyboard]));
|
||||
setPreviewEnabled(false);
|
||||
setProximityCorrectionEnabled(false);
|
||||
for (CustomKeyboard.CustomKey k: getKeyboard().getKeys()) {
|
||||
if (stickyKeys.contains(k.codes[0])) {
|
||||
k.on = true;
|
||||
invalidateAllKeys();
|
||||
}
|
||||
}
|
||||
|
||||
// setKeyboard() already invalidates all keys,
|
||||
// here we check for our memory of sticky keys state (and any that changed to on and were added to stickyKeys Set)
|
||||
recheckStickyKeys();
|
||||
//ScummVMActivity.this._scummvm.displayMessageOnOSD ("NEW KEYBOARD LAYOUT: QWERTY"
|
||||
// + (alt ? " ALT " : "") + (shift? " SHIFT" : ""));
|
||||
}
|
||||
}
|
||||
|
||||
@ -185,93 +258,131 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
|
||||
builtinKeyboard.setOnKeyboardActionListener(new CustomKeyboardView.OnKeyboardActionListener() {
|
||||
|
||||
public void onPress(int key) {
|
||||
Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onPress key: " + key ); // CALLED
|
||||
//Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onPress key: " + key ); // CALLED
|
||||
if (key == KeyEvent.KEYCODE_BACK) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (key < 0) {
|
||||
if (key <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (CustomKeyboard.CustomKey k: builtinKeyboard.getKeyboard().getKeys()) {
|
||||
if (k.sticky && key == k.codes[0])
|
||||
if (k.sticky && key == k.codes[0]) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int compiledMetaState = builtinKeyboard.getCompiledMetaState();
|
||||
|
||||
// keys with keyCode greater than 100000, should be submitted with a LEFT_SHIFT_ modifier (and decreased by 100000 to get their proper code)
|
||||
if (key > 100000) {
|
||||
key -= 100000;
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT));
|
||||
compiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
|
||||
}
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, key));
|
||||
|
||||
//
|
||||
// downTime (long) - The time (in SystemClock.uptimeMillis()) at which this key code originally went down.
|
||||
// ** Since this is a down event, this will be the same as getEventTime(). **
|
||||
// Note that when chording keys, this value is the down time of the most recently pressed key, which may not be the same physical key of this event.
|
||||
// eventTime (long) - The time (in SystemClock.uptimeMillis()) at which this event happened.
|
||||
// TODO update repeat and event time? with
|
||||
builtinKeyboard.mEventTime = SystemClock.uptimeMillis();
|
||||
KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventTime,
|
||||
builtinKeyboard.mEventTime,
|
||||
KeyEvent.ACTION_DOWN,
|
||||
key,
|
||||
0,
|
||||
compiledMetaState);
|
||||
|
||||
_main_surface.dispatchKeyEvent(compiledKeyEvent);
|
||||
}
|
||||
|
||||
public void onRelease(int key) {
|
||||
Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onRelease key: " + key );
|
||||
//Log.d(ScummVM.LOG_TAG, "SHOW KEYBOARD - 001 - onRelease key: " + key );
|
||||
if (key == KeyEvent.KEYCODE_BACK) {
|
||||
builtinKeyboard.setOnKeyboardActionListener(null);
|
||||
showScreenKeyboardWithoutTextInputField(0); // Hide keyboard
|
||||
return;
|
||||
}
|
||||
|
||||
// CustomKeyboard.KEYCODE_SHIFT is a special button (negative value)
|
||||
// which basically changes the keyboard to a another,"SHIFTED", layout (other keys)
|
||||
// In this layout, if it's NOT also an "ALT" layout, keys are assumed to get the LEFT SHIFT modifier by default
|
||||
if (key == CustomKeyboard.KEYCODE_SHIFT) {
|
||||
builtinKeyboard.shift = ! builtinKeyboard.shift;
|
||||
if (builtinKeyboard.shift && !builtinKeyboard.alt) {
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT));
|
||||
} else {
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT));
|
||||
}
|
||||
builtinKeyboard.shift = !builtinKeyboard.shift;
|
||||
builtinKeyboard.ChangeKeyboard();
|
||||
return;
|
||||
}
|
||||
|
||||
if (key == CustomKeyboard.KEYCODE_ALT) {
|
||||
builtinKeyboard.alt = ! builtinKeyboard.alt;
|
||||
if (builtinKeyboard.alt) {
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT));
|
||||
} else {
|
||||
builtinKeyboard.alt = !builtinKeyboard.alt;
|
||||
if (!builtinKeyboard.alt) {
|
||||
builtinKeyboard.shift = false;
|
||||
}
|
||||
builtinKeyboard.ChangeKeyboard();
|
||||
return;
|
||||
}
|
||||
|
||||
if (key < 0) {
|
||||
if (key <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// TODO - Probably remove keys like caps lock, scroll lock, num lock, print etc...
|
||||
//
|
||||
for (CustomKeyboard.CustomKey k: builtinKeyboard.getKeyboard().getKeys()) {
|
||||
if (k.sticky && key == k.codes[0]) {
|
||||
if (k.on) {
|
||||
builtinKeyboard.stickyKeys.add(key);
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, key));
|
||||
} else {
|
||||
if (builtinKeyboard.stickyKeys.contains(key)) {
|
||||
// if it was "remembered" (in stickyKeys set) as ON
|
||||
// (and it off by removing them from stickyKeys set)
|
||||
builtinKeyboard.stickyKeys.remove(key);
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, key));
|
||||
} else {
|
||||
// if it was "remembered" (in stickyKeys set) as OFF
|
||||
// (turn it on by adding them to stickyKeys set)
|
||||
builtinKeyboard.stickyKeys.add(key);
|
||||
}
|
||||
builtinKeyboard.recheckStickyKeys();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
boolean shifted = false;
|
||||
int compiledMetaState = builtinKeyboard.getCompiledMetaState();
|
||||
|
||||
//boolean shifted = false;
|
||||
if (key > 100000) {
|
||||
key -= 100000;
|
||||
shifted = true;
|
||||
//shifted = true;
|
||||
compiledMetaState |= KeyEvent.META_SHIFT_LEFT_ON;
|
||||
}
|
||||
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, key));
|
||||
// TODO properly set repeat value?
|
||||
KeyEvent compiledKeyEvent = new KeyEvent(builtinKeyboard.mEventTime,
|
||||
SystemClock.uptimeMillis(),
|
||||
KeyEvent.ACTION_UP,
|
||||
key,
|
||||
0,
|
||||
compiledMetaState);
|
||||
|
||||
if (shifted) {
|
||||
_main_surface.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT));
|
||||
builtinKeyboard.stickyKeys.remove(KeyEvent.KEYCODE_SHIFT_LEFT);
|
||||
for (CustomKeyboard.CustomKey k: builtinKeyboard.getKeyboard().getKeys())
|
||||
{
|
||||
if (k.sticky && k.codes[0] == KeyEvent.KEYCODE_SHIFT_LEFT && k.on)
|
||||
{
|
||||
k.on = false;
|
||||
builtinKeyboard.invalidateAllKeys();
|
||||
_main_surface.dispatchKeyEvent(compiledKeyEvent);
|
||||
builtinKeyboard.mEventTime = -1; // reset event time
|
||||
|
||||
// Excluding the CAPS LOCK NUM LOCK AND SCROLL LOCK keys,
|
||||
// clear the state of all other sticky keys that are used in a key combo
|
||||
// when we reach this part of the code
|
||||
if (builtinKeyboard.stickyKeys.size() > 0) {
|
||||
HashSet<Integer> stickiesToReleaseSet = new HashSet<>();
|
||||
for (int tmpKeyCode : builtinKeyboard.stickyKeys) {
|
||||
if (tmpKeyCode != KeyEvent.KEYCODE_CAPS_LOCK
|
||||
&& tmpKeyCode != KeyEvent.KEYCODE_NUM_LOCK
|
||||
&& tmpKeyCode != KeyEvent.KEYCODE_SCROLL_LOCK) {
|
||||
stickiesToReleaseSet.add(tmpKeyCode);
|
||||
}
|
||||
}
|
||||
if (stickiesToReleaseSet.size() > 0) {
|
||||
builtinKeyboard.stickyKeys.removeAll(stickiesToReleaseSet);
|
||||
builtinKeyboard.recheckStickyKeys();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -324,11 +435,11 @@ public class ScummVMActivity extends Activity implements OnKeyboardVisibilityLis
|
||||
|
||||
if (bGlobalsCompatibilityHacksTextInputEmulatesHwKeyboard) {
|
||||
showScreenKeyboardWithoutTextInputField(dGlobalsTextInputKeyboard);
|
||||
Log.d(ScummVM.LOG_TAG, "showScreenKeyboard - showScreenKeyboardWithoutTextInputField()");
|
||||
//Log.d(ScummVM.LOG_TAG, "showScreenKeyboard - showScreenKeyboardWithoutTextInputField()");
|
||||
_main_surface.captureMouse(false);
|
||||
return;
|
||||
}
|
||||
Log.d(ScummVM.LOG_TAG, "showScreenKeyboard: YOU SHOULD NOT SEE ME!!!");
|
||||
//Log.d(ScummVM.LOG_TAG, "showScreenKeyboard: YOU SHOULD NOT SEE ME!!!");
|
||||
|
||||
// // TODO redundant ?
|
||||
// if (_screenKeyboard != null) {
|
||||
|
@ -289,6 +289,7 @@ public class ScummVMEventsBase implements
|
||||
break;
|
||||
}
|
||||
|
||||
// look in events.cpp for how this is handled
|
||||
_scummvm.pushEvent(type, action, keyCode,
|
||||
e.getUnicodeChar() & KeyCharacterMap.COMBINING_ACCENT_MASK,
|
||||
e.getMetaState(), e.getRepeatCount(),
|
||||
|
@ -6,7 +6,7 @@
|
||||
scummvm:verticalGap="0px"
|
||||
scummvm:keyHeight="10%p">
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="45" scummvm:keyLabel="q" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="45" scummvm:keyLabel="q" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="51" scummvm:keyLabel="w" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="33" scummvm:keyLabel="e" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="46" scummvm:keyLabel="r" scummvm:isRepeatable="true"/>
|
||||
@ -15,10 +15,10 @@
|
||||
<CustomKey scummvm:codes="49" scummvm:keyLabel="u" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="37" scummvm:keyLabel="i" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="43" scummvm:keyLabel="o" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="44" scummvm:keyLabel="p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="44" scummvm:keyLabel="p" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="29" scummvm:keyLabel="a" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="29" scummvm:keyLabel="a" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="47" scummvm:keyLabel="s" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="32" scummvm:keyLabel="d" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="34" scummvm:keyLabel="f" scummvm:isRepeatable="true"/>
|
||||
@ -27,7 +27,7 @@
|
||||
<CustomKey scummvm:codes="38" scummvm:keyLabel="j" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="39" scummvm:keyLabel="k" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="40" scummvm:keyLabel="l" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="74" scummvm:keyLabel=";" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="74" scummvm:keyLabel=";" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="-1" scummvm:keyLabel="⇪" scummvm:keyEdgeFlags="left"/>
|
||||
@ -38,16 +38,16 @@
|
||||
<CustomKey scummvm:codes="30" scummvm:keyLabel="b" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="42" scummvm:keyLabel="n" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="41" scummvm:keyLabel="m" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow rowEdgeFlags="bottom">
|
||||
<CustomKey scummvm:codes="-6" scummvm:keyLabel="123…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="71" scummvm:keyLabel="[" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="72" scummvm:keyLabel="]" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="76" scummvm:keyLabel="/" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:keyWidth="20%p" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="55" scummvm:keyLabel="," scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="56" scummvm:keyLabel="." scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="-6" scummvm:keyLabel="123…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="71" scummvm:keyLabel="[" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="72" scummvm:keyLabel="]" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="76" scummvm:keyLabel="/" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:isRepeatable="true" scummvm:keyWidth="20%p"/>
|
||||
<CustomKey scummvm:codes="55" scummvm:keyLabel="," scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="56" scummvm:keyLabel="." scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
</CustomKeyboard>
|
||||
|
@ -6,7 +6,7 @@
|
||||
scummvm:verticalGap="0px"
|
||||
scummvm:keyHeight="10%p">
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="8" scummvm:keyLabel="1" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="8" scummvm:keyLabel="1" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="9" scummvm:keyLabel="2" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="10" scummvm:keyLabel="3" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="11" scummvm:keyLabel="4" scummvm:isRepeatable="true"/>
|
||||
@ -15,41 +15,44 @@
|
||||
<CustomKey scummvm:codes="14" scummvm:keyLabel="7" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="15" scummvm:keyLabel="8" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="16" scummvm:keyLabel="9" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="7" scummvm:keyLabel="0" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="7" scummvm:keyLabel="0" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="111" scummvm:keyLabel="Esc" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="68" scummvm:keyLabel="`" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="69" scummvm:keyLabel="-" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="70" scummvm:keyLabel="=" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="73" scummvm:keyLabel="\\" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="124" scummvm:keyLabel="Ins" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="111" scummvm:keyLabel="Esc" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="68" scummvm:keyLabel="`" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="69" scummvm:keyLabel="-" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="70" scummvm:keyLabel="=" scummvm:isRepeatable="true"/>
|
||||
<!-- The "\" character is used as a special key to fix a bug with backspace usage,
|
||||
so it's ignored in the input and thus we don't show it on the virtual keyboard either -->
|
||||
<!-- <CustomKey scummvm:codes="73" scummvm:keyLabel="\\" scummvm:isRepeatable="true"/> -->
|
||||
<CustomKey scummvm:codes="76" scummvm:keyLabel="/" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="124" scummvm:keyLabel="Ins" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="92" scummvm:keyLabel="PgUp" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="122" scummvm:keyLabel="Home" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="19" scummvm:keyLabel="↑" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="123" scummvm:keyLabel="End" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
|
||||
<CustomKey scummvm:codes="19" scummvm:keyLabel="↑" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="123" scummvm:keyLabel="End" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="-1" scummvm:keyLabel="!@#…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="75" scummvm:keyLabel="'" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100075" scummvm:keyLabel=""" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="61" scummvm:keyLabel="Tab" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="115" scummvm:keyLabel="CapsLk" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="112" scummvm:keyLabel="Del" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="93" scummvm:keyLabel="PgDn" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="21" scummvm:keyLabel="←" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="20" scummvm:keyLabel="↓" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="22" scummvm:keyLabel="→" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="-1" scummvm:keyLabel="!@#…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="75" scummvm:keyLabel="'" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100075" scummvm:keyLabel=""" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="61" scummvm:keyLabel="Tab" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="115" scummvm:keyLabel="CapsLk" scummvm:isSticky="true" />
|
||||
<CustomKey scummvm:codes="112" scummvm:keyLabel="Del" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="93" scummvm:keyLabel="PgDn" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="21" scummvm:keyLabel="←" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="20" scummvm:keyLabel="↓" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="22" scummvm:keyLabel="→" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow rowEdgeFlags="bottom">
|
||||
<CustomKey scummvm:codes="-6" scummvm:keyLabel="abc…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="59" scummvm:keyLabel="Shift" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="113" scummvm:keyLabel="Ctrl" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="117" scummvm:keyLabel="Meta" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="117" scummvm:keyLabel="Meta" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="57" scummvm:keyLabel="Alt" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="58" scummvm:keyLabel="Alt" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="118" scummvm:keyLabel="Meta" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="226" scummvm:keyLabel="Menu" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="118" scummvm:keyLabel="Meta" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="226" scummvm:keyLabel="Menu" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="114" scummvm:keyLabel="Ctrl" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="60" scummvm:keyLabel="Shift" scummvm:isSticky="true"/>
|
||||
</CustomRow>
|
||||
|
@ -6,40 +6,40 @@
|
||||
scummvm:verticalGap="0px"
|
||||
scummvm:keyHeight="10%p">
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="100008" scummvm:keyLabel="!" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100009" scummvm:keyLabel="\@" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100010" scummvm:keyLabel="#" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100011" scummvm:keyLabel="$" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100012" scummvm:keyLabel="%" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100013" scummvm:keyLabel="^" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100008" scummvm:keyLabel="!" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="100009" scummvm:keyLabel="\@" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100010" scummvm:keyLabel="#" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100011" scummvm:keyLabel="$" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100012" scummvm:keyLabel="%" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100013" scummvm:keyLabel="^" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100014" scummvm:keyLabel="&" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100015" scummvm:keyLabel="*" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100016" scummvm:keyLabel="(" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100007" scummvm:keyLabel=")" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100015" scummvm:keyLabel="*" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100016" scummvm:keyLabel="(" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100007" scummvm:keyLabel=")" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="111" scummvm:keyLabel="Esc" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100068" scummvm:keyLabel="~" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100069" scummvm:keyLabel="_" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100070" scummvm:keyLabel="+" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100073" scummvm:keyLabel="|" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="111" scummvm:keyLabel="Esc" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="100068" scummvm:keyLabel="~" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100069" scummvm:keyLabel="_" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100070" scummvm:keyLabel="+" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100073" scummvm:keyLabel="|" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="100075" scummvm:keyLabel=""" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="131" scummvm:keyLabel="F1" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="132" scummvm:keyLabel="F2" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="133" scummvm:keyLabel="F3" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="134" scummvm:keyLabel="F4" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
|
||||
<CustomKey scummvm:codes="131" scummvm:keyLabel="F1" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="132" scummvm:keyLabel="F2" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="133" scummvm:keyLabel="F3" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="134" scummvm:keyLabel="F4" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="-1" scummvm:keyLabel="123…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="143" scummvm:keyLabel="NumLk" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="120" scummvm:keyLabel="Print" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="116" scummvm:keyLabel="ScrollLk" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="121" scummvm:keyLabel="Pause" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="158" scummvm:keyLabel="Kp ." scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="135" scummvm:keyLabel="F5" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="136" scummvm:keyLabel="F6" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="137" scummvm:keyLabel="F7" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="138" scummvm:keyLabel="F8" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="-1" scummvm:keyLabel="123…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="143" scummvm:keyLabel="NumLk" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="120" scummvm:keyLabel="Print" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="116" scummvm:keyLabel="ScrollLk" scummvm:isSticky="true"/>
|
||||
<CustomKey scummvm:codes="121" scummvm:keyLabel="Pause" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="158" scummvm:keyLabel="Kp ." scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="135" scummvm:keyLabel="F5" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="136" scummvm:keyLabel="F6" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="137" scummvm:keyLabel="F7" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="138" scummvm:keyLabel="F8" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow rowEdgeFlags="bottom">
|
||||
<CustomKey scummvm:codes="-6" scummvm:keyLabel="abc…" scummvm:keyEdgeFlags="left"/>
|
||||
@ -48,9 +48,9 @@
|
||||
<CustomKey scummvm:codes="156" scummvm:keyLabel="Kp -" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="157" scummvm:keyLabel="Kp +" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="160" scummvm:keyLabel="Kp ↵" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="139" scummvm:keyLabel="F9" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="140" scummvm:keyLabel="F10" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="141" scummvm:keyLabel="F11" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="142" scummvm:keyLabel="F12" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="139" scummvm:keyLabel="F9" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="140" scummvm:keyLabel="F10" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="141" scummvm:keyLabel="F11" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="142" scummvm:keyLabel="F12" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right" />
|
||||
</CustomRow>
|
||||
</CustomKeyboard>
|
||||
|
@ -6,7 +6,7 @@
|
||||
scummvm:verticalGap="0px"
|
||||
scummvm:keyHeight="10%p">
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="45" scummvm:keyLabel="Q" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="45" scummvm:keyLabel="Q" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="51" scummvm:keyLabel="W" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="33" scummvm:keyLabel="E" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="46" scummvm:keyLabel="R" scummvm:isRepeatable="true"/>
|
||||
@ -15,10 +15,10 @@
|
||||
<CustomKey scummvm:codes="49" scummvm:keyLabel="U" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="37" scummvm:keyLabel="I" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="43" scummvm:keyLabel="O" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="44" scummvm:keyLabel="P" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="44" scummvm:keyLabel="P" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="29" scummvm:keyLabel="A" scummvm:keyEdgeFlags="left" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="29" scummvm:keyLabel="A" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="47" scummvm:keyLabel="S" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="32" scummvm:keyLabel="D" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="34" scummvm:keyLabel="F" scummvm:isRepeatable="true"/>
|
||||
@ -27,7 +27,7 @@
|
||||
<CustomKey scummvm:codes="38" scummvm:keyLabel="J" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="39" scummvm:keyLabel="K" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="40" scummvm:keyLabel="L" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="74" scummvm:keyLabel=":" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="74" scummvm:keyLabel=":" scummvm:isRepeatable="true" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow>
|
||||
<CustomKey scummvm:codes="-1" scummvm:keyLabel="⇫" scummvm:keyEdgeFlags="left"/>
|
||||
@ -38,16 +38,16 @@
|
||||
<CustomKey scummvm:codes="30" scummvm:keyLabel="B" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="42" scummvm:keyLabel="N" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="41" scummvm:keyLabel="M" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="67" scummvm:keyLabel="⬅" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
<CustomRow rowEdgeFlags="bottom">
|
||||
<CustomKey scummvm:codes="-6" scummvm:keyLabel="!@#…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="71" scummvm:keyLabel="{" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="72" scummvm:keyLabel="}" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="76" scummvm:keyLabel="\?" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:keyWidth="20%p" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="55" scummvm:keyLabel="<" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="56" scummvm:keyLabel=">" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="-6" scummvm:keyLabel="!@#…" scummvm:keyEdgeFlags="left"/>
|
||||
<CustomKey scummvm:codes="71" scummvm:keyLabel="{" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="72" scummvm:keyLabel="}" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="76" scummvm:keyLabel="\?" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="62" scummvm:keyLabel="Space" scummvm:isRepeatable="true" scummvm:keyWidth="20%p"/>
|
||||
<CustomKey scummvm:codes="55" scummvm:keyLabel="<" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="56" scummvm:keyLabel=">" scummvm:isRepeatable="true"/>
|
||||
<CustomKey scummvm:codes="66" scummvm:keyLabel="Enter" scummvm:isRepeatable="true" scummvm:keyWidth="20%p" scummvm:keyEdgeFlags="right"/>
|
||||
</CustomRow>
|
||||
</CustomKeyboard>
|
||||
|
Loading…
Reference in New Issue
Block a user