+115
-40
bite.c
+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
+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
+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
+
}