mirror of https://github.com/bjornbytes/lovr.git
textinput event utf8 encode;
This commit is contained in:
parent
c24317d982
commit
079338c0cc
|
@ -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:
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue