Mercurial > dwindows
changeset 2596:60ec91d23746
Android: Add initial keyboard support for Android.
Any keycodes I couldn't find equivalents for in Android I put at value 1000
or above, since the highest Android KEYCODE constant was around 300.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sat, 29 May 2021 21:42:59 +0000 |
parents | 6b5057dd6b8e |
children | 99fdcb7f2a2a |
files | android/DWindows.kt android/dw.cpp dw.h |
diffstat | 3 files changed, 105 insertions(+), 83 deletions(-) [+] |
line wrap: on
line diff
--- a/android/DWindows.kt Fri May 28 18:28:15 2021 +0000 +++ b/android/DWindows.kt Sat May 29 21:42:59 2021 +0000 @@ -2861,6 +2861,13 @@ render = DWRender(this) render!!.tag = dataArrayMap render!!.id = cid + render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event -> + if (event.action == KeyEvent.ACTION_DOWN) { + eventHandlerKey(render!!, 2, keyCode, event.unicodeChar, event.modifiers, event.characters) + true + } + false + }) } return render } @@ -3676,6 +3683,7 @@ external fun eventHandlerTimer(sigfunc: Long, data: Long): Int external fun eventHandlerHTMLResult(obj1: View, message: Int, result: String, data: Long) external fun eventHandlerContainer(obj1: View, message: Int, title: String?, x: Int, y: Int, data: Long) + external fun eventHandlerKey(obj1: View, message: Int, character: Int, vk: Int, modifiers: Int, str: String) companion object {
--- a/android/dw.cpp Fri May 28 18:28:15 2021 +0000 +++ b/android/dw.cpp Sat May 29 21:42:59 2021 +0000 @@ -300,8 +300,8 @@ case 2: { int (*keypressfunc)(HWND, char, int, int, void *, char *) = (int (* API)(HWND, char, int, int, void *, char *))handler->signalfunction; - char *utf8 = (char *)params[1], ch = utf8 ? utf8[0] : '\0'; - int vk = 0, special = 0; + char *utf8 = (char *)params[1], ch = (char)DW_POINTER_TO_INT(params[3]); + int vk = DW_POINTER_TO_INT(params[4]), special = DW_POINTER_TO_INT(params[5]); retval = keypressfunc(handler->window, ch, (int)vk, special, handler->data, utf8); break; @@ -624,6 +624,20 @@ _dw_event_handler(obj1, params); } +JNIEXPORT void JNICALL +Java_org_dbsoft_dwindows_DWindows_eventHandlerKey(JNIEnv *env, jobject obj, jobject obj1, jint message, jint ch, + jint vk, jint modifiers, jstring str) { +#ifdef _DW_EVENT_THREADING + char *cstr = str ? strdup(env->GetStringUTFChars(str, nullptr)) : nullptr; +#else + const char *cstr = str ? env->GetStringUTFChars(str, nullptr) : nullptr; +#endif + void *params[_DW_EVENT_PARAM_SIZE] = { nullptr, DW_POINTER(cstr), nullptr, DW_INT_TO_POINTER(ch), DW_INT_TO_POINTER(vk), + DW_INT_TO_POINTER(modifiers), nullptr, nullptr, DW_INT_TO_POINTER(message), nullptr }; + + _dw_event_handler(obj1, params); +} + /* Handler for Timer events */ JNIEXPORT jint JNICALL Java_org_dbsoft_dwindows_DWindows_eventHandlerTimer(JNIEnv* env, jobject obj, jlong sigfunc, jlong data) {
--- a/dw.h Fri May 28 18:28:15 2021 +0000 +++ b/dw.h Sat May 29 21:42:59 2021 +0000 @@ -877,89 +877,89 @@ #define DW_MB_QUESTION (1 << 13) /* Virtual Key Codes */ -#define VK_LBUTTON 0 -#define VK_RBUTTON 1 -#define VK_CANCEL 2 -#define VK_MBUTTON 3 -#define VK_BACK 4 -#define VK_TAB 5 -#define VK_CLEAR 6 -#define VK_RETURN 7 -#define VK_MENU 8 -#define VK_PAUSE 9 -#define VK_CAPITAL 10 -#define VK_ESCAPE 11 -#define VK_SPACE 12 -#define VK_PRIOR 13 -#define VK_NEXT 14 -#define VK_END 15 -#define VK_HOME 16 -#define VK_LEFT 17 -#define VK_UP 18 -#define VK_RIGHT 19 -#define VK_DOWN 20 -#define VK_SELECT 21 -#define VK_PRINT 22 -#define VK_EXECUTE 23 -#define VK_SNAPSHOT 24 -#define VK_INSERT 25 -#define VK_DELETE 26 -#define VK_HELP 27 -#define VK_LWIN 28 -#define VK_RWIN 29 -#define VK_NUMPAD0 30 -#define VK_NUMPAD1 31 -#define VK_NUMPAD2 32 -#define VK_NUMPAD3 33 -#define VK_NUMPAD4 34 -#define VK_NUMPAD5 35 -#define VK_NUMPAD6 36 -#define VK_NUMPAD7 37 -#define VK_NUMPAD8 38 -#define VK_NUMPAD9 39 -#define VK_MULTIPLY 40 -#define VK_ADD 41 -#define VK_SEPARATOR 42 -#define VK_SUBTRACT 43 -#define VK_DECIMAL 44 -#define VK_DIVIDE 45 -#define VK_F1 46 -#define VK_F2 47 -#define VK_F3 48 -#define VK_F4 49 -#define VK_F5 50 -#define VK_F6 51 -#define VK_F7 52 -#define VK_F8 53 -#define VK_F9 54 -#define VK_F10 55 -#define VK_F11 56 -#define VK_F12 57 -#define VK_F13 58 -#define VK_F14 59 -#define VK_F15 60 -#define VK_F16 61 -#define VK_F17 62 -#define VK_F18 63 -#define VK_F19 64 -#define VK_F20 65 -#define VK_F21 66 -#define VK_F22 67 -#define VK_F23 68 -#define VK_F24 69 -#define VK_NUMLOCK 70 -#define VK_SCROLL 71 -#define VK_LSHIFT 72 -#define VK_RSHIFT 73 -#define VK_LCONTROL 74 -#define VK_RCONTROL 75 -#define VK_LMENU 76 -#define VK_RMENU 77 +#define VK_LBUTTON 1000 +#define VK_RBUTTON 1001 +#define VK_CANCEL 1002 +#define VK_MBUTTON 1003 +#define VK_BACK 4 /* KeyEvent.KEYCODE_BACK */ +#define VK_TAB 61 /* KeyEvent.KEYCODE_TAB */ +#define VK_CLEAR 28 /* KeyEvent.KEYCODE_CLEAR */ +#define VK_RETURN 66 /* KeyEvent.KEYCODE_ENTER */ +#define VK_MENU 82 /* KeyEvent.KEYCODE_MENU */ +#define VK_PAUSE 121 /* KeyEvent.KEYCODE_BREAK */ +#define VK_CAPITAL 115 /* KeyEvent.KEYCODE_CAPS_LOCK */ +#define VK_ESCAPE 111 /* KeyEvent.KEYCODE_ESCAPE */ +#define VK_SPACE 62 /* KeyEvent.KEYCODE_SPACE */ +#define VK_PRIOR 92 /* KeyEvent.KEYCODE_PAGE_UP */ +#define VK_NEXT 93 /* KeyEvent.KEYCODE_PAGE_DOWN */ +#define VK_END 123 /* KeyEvent.KEYCODE_MOVE_END */ +#define VK_HOME 122 /* KeyEvent.KEYCODE_MOVE_HOME */ +#define VK_LEFT 21 /* KeyEvent.KEYCODE_DPAD_LEFT */ +#define VK_UP 19 /* KeyEvent.KEYCODE_DPAD_UP */ +#define VK_RIGHT 22 /* KeyEvent.KEYCODE_DPAD_RIGHT */ +#define VK_DOWN 20 /* KeyEvent.KEYCODE_DPAD_DOWN */ +#define VK_SELECT 1004 +#define VK_PRINT 1005 +#define VK_EXECUTE 1006 +#define VK_SNAPSHOT 120 /* KeyEvent.KEYCODE_SYSRQ */ +#define VK_INSERT 124 /* KeyEvent.KEYCODE_INSERT */ +#define VK_DELETE 67 /* KeyEvent.KEYCODE_DEL */ +#define VK_HELP 259 /* KeyEvent.KEYCODE_HELP */ +#define VK_LWIN 1007 +#define VK_RWIN 1008 +#define VK_NUMPAD0 7 /* KeyEvent.KEYCODE_0 */ +#define VK_NUMPAD1 8 /* KeyEvent.KEYCODE_1 */ +#define VK_NUMPAD2 9 /* KeyEvent.KEYCODE_2 */ +#define VK_NUMPAD3 10 /* KeyEvent.KEYCODE_3 */ +#define VK_NUMPAD4 11 /* KeyEvent.KEYCODE_4 */ +#define VK_NUMPAD5 12 /* KeyEvent.KEYCODE_5 */ +#define VK_NUMPAD6 13 /* KeyEvent.KEYCODE_6 */ +#define VK_NUMPAD7 14 /* KeyEvent.KEYCODE_7 */ +#define VK_NUMPAD8 15 /* KeyEvent.KEYCODE_8 */ +#define VK_NUMPAD9 16 /* KeyEvent.KEYCODE_9 */ +#define VK_MULTIPLY 155 /* KeyEvent.KEYCODE_NUMPAD_MULTIPLY */ +#define VK_ADD 157 /* KeyEvent.KEYCODE_NUMPAD_ADD */ +#define VK_SEPARATOR 1009 +#define VK_SUBTRACT 156 /* KeyEvent.KEYCODE_NUMPAD_SUBTRACT */ +#define VK_DECIMAL 158 /* KeyEvent.KEYCODE_NUMPAD_DOT */ +#define VK_DIVIDE 154 /* KeyEvent.KEYCODE_NUMPAD_DIVIDE */ +#define VK_F1 131 /* KeyEvent.KEYCODE_F1 */ +#define VK_F2 132 /* KeyEvent.KEYCODE_F2 */ +#define VK_F3 133 /* KeyEvent.KEYCODE_F3 */ +#define VK_F4 134 /* KeyEvent.KEYCODE_F4 */ +#define VK_F5 135 /* KeyEvent.KEYCODE_F5 */ +#define VK_F6 136 /* KeyEvent.KEYCODE_F6 */ +#define VK_F7 137 /* KeyEvent.KEYCODE_F7 */ +#define VK_F8 138 /* KeyEvent.KEYCODE_F8 */ +#define VK_F9 139 /* KeyEvent.KEYCODE_F9 */ +#define VK_F10 140 /* KeyEvent.KEYCODE_F10 */ +#define VK_F11 141 /* KeyEvent.KEYCODE_F11 */ +#define VK_F12 142 /* KeyEvent.KEYCODE_F12 */ +#define VK_F13 1010 +#define VK_F14 1011 +#define VK_F15 1012 +#define VK_F16 1014 +#define VK_F17 1015 +#define VK_F18 1016 +#define VK_F19 1017 +#define VK_F20 1018 +#define VK_F21 1019 +#define VK_F22 1020 +#define VK_F23 1021 +#define VK_F24 1022 +#define VK_NUMLOCK 143 /* KeyEvent.KEYCODE_NUMLOCK */ +#define VK_SCROLL 116 /* KeyEvent.KEYCODE_SCROLL_LOCK */ +#define VK_LSHIFT 59 /* KeyEvent.KEYCODE_SHIFT_LEFT */ +#define VK_RSHIFT 60 /* KeyEvent.KEYCODE_SHIFT_RIGHT */ +#define VK_LCONTROL 113 /* KeyEvent.KEYCODE_CTRL_LEFT */ +#define VK_RCONTROL 114 /* KeyEvent.KEYCODE_CTRL_RIGHT */ +#define VK_LMENU 117 /* KeyEvent.KEYCODE_META_LEFT */ +#define VK_RMENU 118 /* KeyEvent.KEYCODE_META_RIGHT */ /* Key Modifiers */ -#define KC_CTRL (1) -#define KC_SHIFT (1 << 1) -#define KC_ALT (1 << 2) +#define KC_CTRL 28672 /* KeyEvent.META_CTRL_MASK */ +#define KC_SHIFT 193 /* KeyEvent.META_SHIFT_MASK */ +#define KC_ALT 458752 /* KeyEvent.META_META_MASK */ #endif /* Template section, framework for new platform ports */