textinput event utf8 encode;

This commit is contained in:
bjorn 2020-08-07 16:25:56 -06:00
parent c24317d982
commit 079338c0cc
2 changed files with 24 additions and 5 deletions

View File

@ -142,8 +142,9 @@ static int nextEvent(lua_State* L) {
return 3;
case EVENT_TEXTINPUT:
lua_pushlstring(L, event.data.text.utf8, strnlen(event.data.text.utf8, 4));
lua_pushinteger(L, event.data.text.codepoint);
return 2;
return 3;
#ifdef LOVR_ENABLE_THREAD
case EVENT_THREAD_ERROR:

View File

@ -23,10 +23,28 @@ static void onKeyboardEvent(ButtonAction action, KeyCode key, uint32_t scancode,
}
static void onTextEvent(uint32_t codepoint) {
lovrEventPush((Event) {
.type = EVENT_TEXTINPUT,
.data.text.codepoint = codepoint
});
Event event = { .type = EVENT_TEXTINPUT, .data.text.codepoint = codepoint };
uint32_t c = codepoint;
char* s = event.data.text.utf8;
if (c <= 0x7f) {
s[0] = codepoint;
} else if (c <= 0x7ff) {
s[0] = (0xc0 | ((c >> 6) & 0x1f));
s[1] = (0x80 | (c & 0x3f));
} else if (c <= 0xffff) {
s[0] = (0xe0 | ((c >> 12) & 0x0f));
s[1] = (0x80 | ((c >> 6) & 0x3f));
s[2] = (0x80 | (c & 0x3f));
} else if (c <= 0x10ffff) {
s[1] = (0xf0 | ((c >> 18) & 0x07));
s[1] = (0x80 | ((c >> 12) & 0x3f));
s[2] = (0x80 | ((c >> 6) & 0x3f));
s[3] = (0x80 | (c & 0x3f));
}
lovrEventPush(event);
}
void lovrVariantDestroy(Variant* variant) {