Mercurial > dwindows
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) {