PojavLauncher 3.0 will require heavy modifications in order to work on those two iOS versions now.
129 lines
5.2 KiB
Objective-C
129 lines
5.2 KiB
Objective-C
#import "KeyboardInput.h"
|
|
#import "../utils.h"
|
|
|
|
#include "../glfw_keycodes.h"
|
|
|
|
@implementation KeyboardInput
|
|
|
|
int keycodeTable[UIKeyboardHIDUsageKeyboardRightGUI+1];
|
|
|
|
+ (void)initKeycodeTable {
|
|
for (int i = UIKeyboardHIDUsageKeyboardA; i <= UIKeyboardHIDUsageKeyboardZ; i++) {
|
|
keycodeTable[i] = i - UIKeyboardHIDUsageKeyboardA + GLFW_KEY_A;
|
|
}
|
|
|
|
// 0-9 keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboard0] = GLFW_KEY_0;
|
|
for (int i = UIKeyboardHIDUsageKeyboard1; i <= UIKeyboardHIDUsageKeyboard9; i++) {
|
|
keycodeTable[i] = i - UIKeyboardHIDUsageKeyboard1 + GLFW_KEY_1;
|
|
}
|
|
|
|
// Arrow keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardUpArrow] = GLFW_KEY_DPAD_UP;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardDownArrow] = GLFW_KEY_DPAD_DOWN;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardLeftArrow] = GLFW_KEY_DPAD_LEFT;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardRightArrow] = GLFW_KEY_DPAD_RIGHT;
|
|
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardComma] = GLFW_KEY_COMMA;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardPeriod] = GLFW_KEY_PERIOD;
|
|
|
|
// Alt keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardLeftAlt] = GLFW_KEY_LEFT_ALT;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardRightAlt] = GLFW_KEY_RIGHT_ALT;
|
|
|
|
// Control keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardLeftControl] = GLFW_KEY_LEFT_CONTROL;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardRightControl] = GLFW_KEY_RIGHT_CONTROL;
|
|
|
|
// Shift keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardLeftShift] = GLFW_KEY_LEFT_SHIFT;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardRightShift] = GLFW_KEY_RIGHT_SHIFT;
|
|
|
|
// Bracket keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardOpenBracket] = GLFW_KEY_LEFT_BRACKET;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardCloseBracket] = GLFW_KEY_RIGHT_BRACKET;
|
|
|
|
// Slash keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardSlash] = GLFW_KEY_SLASH;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardBackslash] = GLFW_KEY_BACKSLASH;
|
|
|
|
// Page keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardPageUp] = GLFW_KEY_PAGE_UP;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardPageDown] = GLFW_KEY_PAGE_DOWN;
|
|
|
|
// Some other keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardHome] = GLFW_KEY_HOME;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardEscape] = GLFW_KEY_ESCAPE;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardTab] = GLFW_KEY_TAB;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardReturnOrEnter] = GLFW_KEY_ENTER;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardSpacebar] = GLFW_KEY_SPACE;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardDeleteOrBackspace] = GLFW_KEY_BACKSPACE;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardDeleteForward] = GLFW_KEY_DELETE;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardGraveAccentAndTilde] = GLFW_KEY_GRAVE_ACCENT;
|
|
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardHyphen] = GLFW_KEY_MINUS;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardEqualSign] = GLFW_KEY_EQUAL;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardSemicolon] = GLFW_KEY_SEMICOLON;
|
|
|
|
// Lock keys
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardCapsLock] = GLFW_KEY_CAPS_LOCK;
|
|
keycodeTable[UIKeyboardHIDUsageKeypadNumLock] = GLFW_KEY_NUM_LOCK;
|
|
keycodeTable[UIKeyboardHIDUsageKeyboardScrollLock] = GLFW_KEY_SCROLL_LOCK;
|
|
|
|
// Numpad keys
|
|
keycodeTable[UIKeyboardHIDUsageKeypadSlash] = GLFW_KEY_NUMPAD_DIVIDE;
|
|
keycodeTable[UIKeyboardHIDUsageKeypadAsterisk] = GLFW_KEY_NUMPAD_MULTIPLY;
|
|
keycodeTable[UIKeyboardHIDUsageKeypadHyphen] = GLFW_KEY_NUMPAD_SUBTRACT;
|
|
keycodeTable[UIKeyboardHIDUsageKeypadPlus] = GLFW_KEY_NUMPAD_ADD;
|
|
keycodeTable[UIKeyboardHIDUsageKeypadEnter] = GLFW_KEY_NUMPAD_ENTER;
|
|
keycodeTable[UIKeyboardHIDUsageKeypadEqualSign] = GLFW_KEY_NUMPAD_EQUAL;
|
|
keycodeTable[UIKeyboardHIDUsageKeypad0] = GLFW_KEY_NUMPAD_0;
|
|
for (int i = UIKeyboardHIDUsageKeypad1; i <= UIKeyboardHIDUsageKeypad9; i++) {
|
|
keycodeTable[i] = i - UIKeyboardHIDUsageKeypad1 + GLFW_KEY_NUMPAD_1;
|
|
}
|
|
|
|
// Function keys
|
|
for (int i = UIKeyboardHIDUsageKeyboardF1; i <= UIKeyboardHIDUsageKeyboardF12; i++) {
|
|
keycodeTable[i] = i - UIKeyboardHIDUsageKeyboardF1 + GLFW_KEY_F1;
|
|
}
|
|
}
|
|
|
|
+ (BOOL)sendKeyEvent:(UIKey *)key down:(BOOL)isDown {
|
|
char modifiers = 0;
|
|
|
|
// convert UIKey's modifiers to GLFW
|
|
if (key.modifierFlags & UIKeyModifierAlphaShift) {
|
|
modifiers |= GLFW_MOD_CAPS_LOCK;
|
|
}
|
|
if (key.modifierFlags & UIKeyModifierShift) {
|
|
modifiers |= GLFW_MOD_SHIFT;
|
|
}
|
|
if (key.modifierFlags & UIKeyModifierAlternate) {
|
|
modifiers |= GLFW_MOD_ALT;
|
|
}
|
|
if (key.modifierFlags & UIKeyModifierControl) {
|
|
modifiers |= GLFW_MOD_CONTROL;
|
|
}
|
|
|
|
// send the keycode
|
|
int keycode = keycodeTable[key.keyCode];
|
|
if (keycode != 0) {
|
|
CallbackBridge_nativeSendKey(keycode, 0 /* scancode */, isDown, modifiers);
|
|
} else {
|
|
NSLog(@"KeyboardInput: Unhandled key %lu", (unsigned long)key.keyCode);
|
|
}
|
|
|
|
// key.characters.length < 11: skip sending characters if the string starts with UIKeyInput
|
|
if (isDown && key.characters.length < 11) {
|
|
for (int i = 0; i < key.characters.length; i++) {
|
|
int keychar = [key.characters characterAtIndex:i];
|
|
CallbackBridge_nativeSendCharMods(keychar, modifiers);
|
|
CallbackBridge_nativeSendChar(keychar);
|
|
}
|
|
}
|
|
|
|
return keycode != 0 || isDown;
|
|
}
|
|
|
|
@end
|