Text input

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-10-10 03:19:01 +03:00
parent 52fe62c3b1
commit 804c420744
3 changed files with 463 additions and 21 deletions

View File

@@ -189,23 +189,57 @@ auto App::init_wayland() -> void
bool ctrl = app->m_kbd.mod_active("Control");
bool alt = app->m_kbd.mod_active("Mod1");
bool meta = app->m_kbd.mod_active("Mod4");
if (!(ctrl || alt || meta)) {
if (sym == XKB_KEY_Left) {
app->m_kbd.typing.push_back(1);
} else if (sym == XKB_KEY_Down) {
app->m_kbd.typing.push_back(2);
} else if (sym == XKB_KEY_Up) {
app->m_kbd.typing.push_back(3);
} else if (sym == XKB_KEY_Right) {
app->m_kbd.typing.push_back(4);
} else {
u32 cp = xkb_keysym_to_utf32(sym);
if (cp >= 0x20) {
char buf[8];
int n = xkb_keysym_to_utf8(sym, buf, sizeof(buf));
if (n > 0)
app->m_kbd.typing.push_utf8(buf);
}
bool handled = false;
switch (sym) {
case XKB_KEY_Left:
app->m_kbd.typing.push_back(1);
handled = true;
break;
case XKB_KEY_Down:
app->m_kbd.typing.push_back(2);
handled = true;
break;
case XKB_KEY_Up:
app->m_kbd.typing.push_back(3);
handled = true;
break;
case XKB_KEY_Right:
app->m_kbd.typing.push_back(4);
handled = true;
break;
case XKB_KEY_BackSpace:
app->m_kbd.typing.push_back(8);
handled = true;
break;
case XKB_KEY_Delete:
case XKB_KEY_KP_Delete:
app->m_kbd.typing.push_back(0x7F);
handled = true;
break;
case XKB_KEY_Return:
case XKB_KEY_KP_Enter:
app->m_kbd.typing.push_back('\n');
handled = true;
break;
case XKB_KEY_w:
case XKB_KEY_W:
if (ctrl) {
app->m_kbd.typing.push_back(8);
handled = true;
}
break;
default:
break;
}
if (!handled && !(ctrl || alt || meta)) {
u32 cp = xkb_keysym_to_utf32(sym);
if (cp >= 0x20) {
char buf[8];
int n = xkb_keysym_to_utf8(sym, buf, sizeof(buf));
if (n > 0)
app->m_kbd.typing.push_utf8(buf);
}
}
} else {
@@ -346,6 +380,7 @@ auto App::init_egl() -> void
auto const font_handle = m_tr->load_font(*font, std::span(fallback_paths));
assert(font_handle && "Could not load font");
m_font = *font_handle;
m_gui->set_font(m_font);
}
auto App::init_signal() -> void