From 10b7903cd144b1d6eb5a1b006edbfaebdb48e689 Mon Sep 17 00:00:00 2001 From: Mitya Selivanov Date: Sun, 11 Aug 2024 12:05:59 +0200 Subject: Xlib: Use XLookupString --- examples/ui.c | 66 ++++++++++++++--------------------------------------------- 1 file changed, 15 insertions(+), 51 deletions(-) (limited to 'examples') diff --git a/examples/ui.c b/examples/ui.c index 16378d4..d51ad99 100755 --- a/examples/ui.c +++ b/examples/ui.c @@ -729,7 +729,6 @@ i64 p_send(u16 slot, IP_Address address, i64 size, u8 *data) { #include static i16 _key_table[512] = {0}; -static i16 _upper[512] = {0}; static u32 _buffer[MAX_NUM_PIXELS] = {0}; static i16 _input[MAX_INPUT_SIZE] = {0}; static XImage _image = {0}; @@ -742,54 +741,6 @@ void p_init(void) { _display = XOpenDisplay(NULL); assert(_display != NULL); - _upper['0'] = ')'; - _upper['1'] = '!'; - _upper['2'] = '@'; - _upper['3'] = '#'; - _upper['4'] = '$'; - _upper['5'] = '%'; - _upper['6'] = '^'; - _upper['7'] = '&'; - _upper['8'] = '*'; - _upper['9'] = '('; - _upper['a'] = 'A'; - _upper['b'] = 'B'; - _upper['c'] = 'C'; - _upper['d'] = 'D'; - _upper['e'] = 'E'; - _upper['f'] = 'F'; - _upper['g'] = 'G'; - _upper['h'] = 'H'; - _upper['i'] = 'I'; - _upper['j'] = 'J'; - _upper['k'] = 'K'; - _upper['l'] = 'L'; - _upper['m'] = 'M'; - _upper['n'] = 'N'; - _upper['o'] = 'O'; - _upper['p'] = 'P'; - _upper['q'] = 'Q'; - _upper['r'] = 'R'; - _upper['s'] = 'S'; - _upper['t'] = 'T'; - _upper['u'] = 'U'; - _upper['v'] = 'V'; - _upper['w'] = 'W'; - _upper['x'] = 'X'; - _upper['y'] = 'Y'; - _upper['z'] = 'Z'; - _upper['['] = '{'; - _upper[']'] = '}'; - _upper[';'] = ':'; - _upper['\''] = '"'; - _upper['`'] = '~'; - _upper['\\'] = '|'; - _upper[','] = '<'; - _upper['.'] = '>'; - _upper['/'] = '?'; - _upper['-'] = '_'; - _upper['='] = '+'; - _key_table[XKeysymToKeycode(_display, XK_Left)] = KEY_LEFT; _key_table[XKeysymToKeycode(_display, XK_Right)] = KEY_RIGHT; _key_table[XKeysymToKeycode(_display, XK_Up)] = KEY_UP; @@ -1015,8 +966,21 @@ i32 p_handle_events(void) { platform.key_down[MOD_CAPS] = !!(ev.xkey.state & LockMask); platform.key_down[MOD_NUM] = !!(ev.xkey.state & Mod2Mask); platform.key_down[MOD_SCROLL] = !!(ev.xkey.state & Mod3Mask); - if (platform.input_size < MAX_INPUT_SIZE) - platform.input[platform.input_size++] = ((platform.key_down[MOD_SHIFT] ^ platform.key_down[MOD_CAPS])) && _upper[k] != 0 ? _upper[k] : k; + if (platform.input_size < MAX_INPUT_SIZE) { + if (k < 32 || k >= 128) + platform.input[platform.input_size++] = k; + else { + c8 buf[16]; + i32 len = XLookupString(&ev.xkey, buf, sizeof buf - 1, NULL, NULL); + buf[len] = '\0'; + printf("key:"); + for (i32 i = 0; i < len; ++i) + printf("%02x", buf[i]); + printf("\n"); + for (i32 i = 0; i < len && platform.input_size < MAX_INPUT_SIZE; ++i, ++platform.input_size) + platform.input[platform.input_size] = buf[i]; + } + } } break; case KeyRelease: { -- cgit v1.2.3