adding X11 inputs

Canoi 8f4fd0d1 22287a96

Changed files
+123 -46
+115 -40
bite.c
··· 18 18 #include <GL/glx.h> 19 19 #include <X11/Xlib.h> 20 20 #include <X11/Xutil.h> 21 + #include <X11/XKBlib.h> 21 22 #include <dlfcn.h> 22 23 #include <time.h> 23 24 #include <unistd.h> ··· 85 86 [0x5A] = BITEK_Z, 86 87 }; 87 88 #else 88 - char keys[512] = { 89 - [XK_tab] = BITEK_TAB, 89 + char keys[] = { 90 + [XK_Tab] = BITEK_TAB, 90 91 [XK_space] = BITEK_SPACE, 91 - [XK_return] = BITEK_RETURN, 92 + [XK_Return] = BITEK_RETURN, 93 + [XK_Shift_L] = BITEK_LSHIFT, 94 + [XK_Shift_R] = BITEK_RSHIFT, 95 + [XK_Control_L] = BITEK_LCONTROL, 96 + [XK_Control_R] = BITEK_RCONTROL, 97 + [XK_Super_L] = BITEK_LSUPER, 98 + [XK_Super_R] = BITEK_RSUPER, 99 + 100 + [XK_Left] = BITEK_LEFT, 101 + [XK_Up] = BITEK_UP, 102 + [XK_Right] = BITEK_RIGHT, 103 + [XK_Down] = BITEK_DOWN, 104 + 105 + [XK_Page_Up] = BITEK_PAGEUP, 106 + [XK_Page_Down] = BITEK_PAGEDOWN, 107 + 108 + [XK_End] = BITEK_END, 109 + [XK_Home] = BITEK_HOME, 110 + 111 + [XK_0] = BITEK_0, 112 + [XK_1] = BITEK_1, 113 + [XK_2] = BITEK_2, 114 + [XK_3] = BITEK_3, 115 + [XK_4] = BITEK_4, 116 + [XK_5] = BITEK_5, 117 + [XK_6] = BITEK_6, 118 + [XK_7] = BITEK_7, 119 + [XK_8] = BITEK_8, 120 + [XK_9] = BITEK_9, 121 + 122 + [XK_A] = BITEK_A, 123 + [XK_B] = BITEK_B, 124 + [XK_C] = BITEK_C, 125 + [XK_D] = BITEK_D, 126 + [XK_E] = BITEK_E, 127 + [XK_F] = BITEK_F, 128 + [XK_G] = BITEK_G, 129 + [XK_H] = BITEK_H, 130 + [XK_I] = BITEK_I, 131 + [XK_J] = BITEK_J, 132 + [XK_K] = BITEK_K, 133 + [XK_L] = BITEK_L, 134 + [XK_M] = BITEK_M, 135 + [XK_N] = BITEK_N, 136 + [XK_O] = BITEK_O, 137 + [XK_P] = BITEK_P, 138 + [XK_Q] = BITEK_Q, 139 + [XK_R] = BITEK_R, 140 + [XK_S] = BITEK_S, 141 + [XK_T] = BITEK_T, 142 + [XK_U] = BITEK_U, 143 + [XK_V] = BITEK_V, 144 + [XK_W] = BITEK_W, 145 + [XK_X] = BITEK_X, 146 + [XK_Y] = BITEK_Y, 147 + [XK_Z] = BITEK_Z, 148 + 149 + [XK_KP_0] = BITEK_NUMPAD0, 150 + [XK_KP_1] = BITEK_NUMPAD1, 151 + [XK_KP_2] = BITEK_NUMPAD2, 152 + [XK_KP_3] = BITEK_NUMPAD3, 153 + [XK_KP_4] = BITEK_NUMPAD4, 154 + [XK_KP_5] = BITEK_NUMPAD5, 155 + [XK_KP_6] = BITEK_NUMPAD6, 156 + [XK_KP_7] = BITEK_NUMPAD7, 157 + [XK_KP_8] = BITEK_NUMPAD8, 158 + [XK_KP_9] = BITEK_NUMPAD9, 92 159 }; 93 160 #endif 94 161 ··· 935 1002 } 936 1003 937 1004 XFree(vi); 1005 + XSelectInput(dpy, handle, ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask); 1006 + XClearWindow(dpy, handle); 938 1007 XStoreName(dpy, handle, conf->window.title); 939 1008 XMapWindow(dpy, handle); 940 1009 ··· 1286 1355 be_Event e = {0}; 1287 1356 be_EventCallback fn = NULL; 1288 1357 switch (ev.type) { 1289 - case ClientMessage: { 1290 - if (ev.xclient.data.l[0] == 1291 - XInternAtom(window->display, "WM_DELETE_WINDOW", 0)) { 1292 - e.type = BITE_WINDOW_CLOSE; 1293 - } 1294 - } break; 1295 - case DestroyNotify: { 1296 - e.type = BITE_QUIT; 1297 - } break; 1298 - case ConfigureNotify: { 1299 - XConfigureEvent xce = ev.xconfigure; 1300 - if ((xce.x != window->x) || (xce.y != window->y)) { 1301 - window->x = xce.x; 1302 - window->y = xce.y; 1303 - e.type = BITE_WINDOW_MOVE; 1304 - e.window.x = xce.x; 1305 - e.window.y = xce.y; 1306 - e.window.handle = window; 1307 - } 1308 - 1309 - if ((xce.width != window->width) || (xce.height != window->height)) { 1310 - window->width = xce.width; 1311 - window->height = xce.height; 1312 - e.type = BITE_WINDOW_RESIZE; 1313 - e.window.x = xce.width; 1314 - e.window.y = xce.height; 1315 - e.window.handle = window; 1316 - } 1317 - } break; 1318 - case KeyPress: { 1319 - e.type = BITE_KEY_PRESSED; 1320 - e.key.keycode = ev.xkey.keycode; 1321 - } break; 1322 - case KeyRelease: { 1323 - e.type = BITE_KEY_RELEASED; 1324 - e.key.keycode = ev.xkey.keycode; 1325 - } break; 1358 + case ClientMessage: { 1359 + if (ev.xclient.data.l[0] == 1360 + XInternAtom(window->display, "WM_DELETE_WINDOW", 0)) { 1361 + e.type = BITE_WINDOW_CLOSE; 1362 + } 1363 + } break; 1364 + case DestroyNotify: { 1365 + e.type = BITE_QUIT; 1366 + } break; 1367 + case ConfigureNotify: { 1368 + XConfigureEvent xce = ev.xconfigure; 1369 + if ((xce.x != window->x) || (xce.y != window->y)) { 1370 + window->x = xce.x; 1371 + window->y = xce.y; 1372 + e.type = BITE_WINDOW_MOVE; 1373 + e.window.x = xce.x; 1374 + e.window.y = xce.y; 1375 + e.window.handle = window; 1376 + } 1377 + if ((xce.width != window->width) || (xce.height != window->height)) { 1378 + window->width = xce.width; 1379 + window->height = xce.height; 1380 + e.type = BITE_WINDOW_RESIZE; 1381 + e.window.x = xce.width; 1382 + e.window.y = xce.height; 1383 + e.window.handle = window; 1384 + } 1385 + } break; 1386 + case KeyPress: { 1387 + e.type = BITE_KEY_PRESSED; 1388 + int keysym = XkbKeycodeToKeysym( 1389 + ctx->window.display, 1390 + ev.xkey.keycode, 1391 + 0, 1392 + 1 1393 + ); 1394 + e.key.keycode = keys[keysym]; 1395 + // printf("KeyPress: %d %d %d\n", keysym, ev.xkey.keycode, e.key.keycode); 1396 + } break; 1397 + case KeyRelease: { 1398 + e.type = BITE_KEY_RELEASED; 1399 + e.key.keycode = keys[ev.xkey.keycode]; 1400 + } break; 1326 1401 } 1327 1402 fn = ctx->callbacks[e.type]; 1328 1403 if (fn)
+6 -4
bite.h
··· 59 59 BITEK_BACKSPACE, 60 60 BITEK_TAB, 61 61 BITEK_RETURN, 62 - BITEK_SHIFT, 63 - BITEK_CONTROL, 62 + BITEK_LSHIFT, 63 + BITEK_RSHIFT, 64 + BITEK_LCONTROL, 65 + BITEK_RCONTROL, 64 66 65 67 BITEK_ESCAPE, 66 68 ··· 117 119 BITEK_Y, 118 120 BITEK_Z, 119 121 120 - BITEK_LWIN, 121 - BITEK_RWIN, 122 + BITEK_LSUPER, 123 + BITEK_RSUPER, 122 124 BITEK_APPS, 123 125 124 126 BITEK_NUMPAD0,
+2 -2
main.c
··· 41 41 be_Shader* shader; 42 42 43 43 void key_pressed(be_Context* ctx, be_Event* ev) { 44 - printf("Pressed: %x\n", ev->key.keycode); 44 + printf("Pressed: %d\n", ev->key.keycode); 45 45 if (ev->key.keycode == BITEK_ESCAPE) bite_set_should_close(ctx, 1); 46 46 } 47 47 ··· 74 74 #endif 75 75 bite_destroy(ctx); 76 76 return 0; 77 - } 77 + }