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;
|
return 3;
|
||||||
|
|
||||||
case EVENT_TEXTINPUT:
|
case EVENT_TEXTINPUT:
|
||||||
|
lua_pushlstring(L, event.data.text.utf8, strnlen(event.data.text.utf8, 4));
|
||||||
lua_pushinteger(L, event.data.text.codepoint);
|
lua_pushinteger(L, event.data.text.codepoint);
|
||||||
return 2;
|
return 3;
|
||||||
|
|
||||||
#ifdef LOVR_ENABLE_THREAD
|
#ifdef LOVR_ENABLE_THREAD
|
||||||
case EVENT_THREAD_ERROR:
|
case EVENT_THREAD_ERROR:
|
||||||
|
|
|
@ -23,10 +23,28 @@ static void onKeyboardEvent(ButtonAction action, KeyCode key, uint32_t scancode,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void onTextEvent(uint32_t codepoint) {
|
static void onTextEvent(uint32_t codepoint) {
|
||||||
lovrEventPush((Event) {
|
Event event = { .type = EVENT_TEXTINPUT, .data.text.codepoint = codepoint };
|
||||||
.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) {
|
void lovrVariantDestroy(Variant* variant) {
|
||||||
|
|
Loading…
Reference in New Issue