summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2024-08-11 12:05:59 +0200
committerMitya Selivanov <automainint@guattari.tech>2024-08-11 12:05:59 +0200
commit10b7903cd144b1d6eb5a1b006edbfaebdb48e689 (patch)
tree87c4ec5e9df003cb795c2969fcb2ed0626bcc07e
parent6e61692c5c8b5308781a8b1d63ec49cbb0c2a35b (diff)
downloadreduced_system_layer-10b7903cd144b1d6eb5a1b006edbfaebdb48e689.zip
Xlib: Use XLookupString
-rwxr-xr-xexamples/ui.c66
1 files changed, 15 insertions, 51 deletions
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 <time.h>
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: {