diff android/dw.cpp @ 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 2acc7ba5dea0
children 3b9bbd69bb9c
line wrap: on
line diff
--- 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) {