Skip to content

Commit

Permalink
Implemented caps lock and character switch behaviour for virtual keyb…
Browse files Browse the repository at this point in the history
…oard.
  • Loading branch information
lanceewing committed Mar 14, 2024
1 parent b827e1e commit 82fda52
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -151,23 +151,83 @@ private UserInput getUserInput() {
}

private void processVirtualKeyboardKeyDown(int keycode) {
if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) {
getUserInput().keyDown(Keys.SHIFT_LEFT);
}

getUserInput().keyDown(keycode & 0xFF);

if (KeyboardTypeData.KEYTYPED_CHAR_MAP.containsKey(keycode)) {
getUserInput().keyTyped(KeyboardTypeData.KEYTYPED_CHAR_MAP.get(keycode));
if ((keycode != Keys.SWITCH_CHARSET) && (keycode != Keys.CAPS_LOCK)) {
if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) {
getUserInput().keyDown(Keys.SHIFT_LEFT);
}

getUserInput().keyDown(keycode & 0xFF);

if (KeyboardTypeData.KEYTYPED_CHAR_MAP.containsKey(keycode)) {
getUserInput().keyTyped(KeyboardTypeData.KEYTYPED_CHAR_MAP.get(keycode));
}
}
}

private void processVirtualKeyboardKeyUp(int keycode) {
getUserInput().keyUp(keycode & 0xFF);
if (keycode == Keys.SWITCH_CHARSET) {
processSwitchCharacterSet();
} else if (keycode == Keys.CAPS_LOCK) {
processCapsLockToggle();
} else {
getUserInput().keyUp(keycode & 0xFF);

if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) {
getUserInput().keyUp(Keys.SHIFT_LEFT);
}
}
}

private void processSwitchCharacterSet() {
switch (keyboardType) {
case PORTRAIT_LOWER_CASE:
case PORTRAIT_UPPER_CASE:
keyboardType = KeyboardType.PORTRAIT_PUNC_NUMBERS;
break;

case LANDSCAPE_LOWER_CASE:
case LANDSCAPE_UPPER_CASE:
keyboardType = KeyboardType.LANDSCAPE_PUNC_NUMBERS;
break;

case PORTRAIT_PUNC_NUMBERS:
keyboardType = KeyboardType.PORTRAIT_LOWER_CASE;
break;

case LANDSCAPE_PUNC_NUMBERS:
keyboardType = KeyboardType.LANDSCAPE_LOWER_CASE;
break;

default:
break;
}

if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) {
getUserInput().keyUp(Keys.SHIFT_LEFT);
viewportManager.update();
}

private void processCapsLockToggle() {
switch (keyboardType) {
case PORTRAIT_LOWER_CASE:
keyboardType = KeyboardType.PORTRAIT_UPPER_CASE;
break;

case PORTRAIT_UPPER_CASE:
keyboardType = KeyboardType.PORTRAIT_LOWER_CASE;
break;

case LANDSCAPE_LOWER_CASE:
keyboardType = KeyboardType.LANDSCAPE_UPPER_CASE;
break;

case LANDSCAPE_UPPER_CASE:
keyboardType = KeyboardType.LANDSCAPE_LOWER_CASE;
break;

default:
break;
}

viewportManager.update();
}

/**
Expand Down
6 changes: 4 additions & 2 deletions core/src/main/java/com/agifans/agile/ui/KeyboardTypeData.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ public class KeyboardTypeData {
static {
// Note: ESC doesn't go through libgdx keyTyped, so we don't map it here.

KEYTYPED_CHAR_MAP.put(Keys.SPACE, (char)32);
KEYTYPED_CHAR_MAP.put(Keys.BACKSPACE, (char)8);
KEYTYPED_CHAR_MAP.put(Keys.TAB, (char)9);
KEYTYPED_CHAR_MAP.put(Keys.SPACE, (char)32);
KEYTYPED_CHAR_MAP.put(EXCLAIMATION_MARK, (char)33);
KEYTYPED_CHAR_MAP.put(DOUBLE_QUOTE, (char)34);
KEYTYPED_CHAR_MAP.put(HASH, (char)35);
Expand Down Expand Up @@ -93,7 +95,7 @@ public class KeyboardTypeData {
KEYTYPED_CHAR_MAP.put(Keys.NUM_7, (char)55);
KEYTYPED_CHAR_MAP.put(Keys.NUM_8, (char)56);
KEYTYPED_CHAR_MAP.put(Keys.NUM_9, (char)57);
KEYTYPED_CHAR_MAP.put(Keys.COLON, (char)58);
KEYTYPED_CHAR_MAP.put(COLON, (char)58);
KEYTYPED_CHAR_MAP.put(Keys.SEMICOLON, (char)59);
KEYTYPED_CHAR_MAP.put(LESS_THAN, (char)60);

Expand Down

0 comments on commit 82fda52

Please sign in to comment.