commit 96b49d4

neauoire  ·  2022-03-28 16:39:05 +0000 UTC
parent 7886b54
Fixed issue with controller/key
3 files changed,  +26, -21
+1, -1
1@@ -25,7 +25,7 @@ cc src/devices/datetime.c src/devices/system.c src/devices/file.c src/uxn.c -DND
2 - `20` screen(partial/vector)
3 - `30` audio(missing)
4 - `70` midi(missing)
5-- `80` controller(partial/key)
6+- `80` controller
7 - `90` mouse(partial/scroll)
8 - `a0` file(missing)
9 - `c0` datetime
+1, -1
1@@ -15,4 +15,4 @@ gcc -std=c89 -D_POSIX_C_SOURCE=199309L -DDEBUG -Wall -Wno-unknown-pragmas -Wpeda
2 # gcc src/uxn.c src/devices/system.c src/devices/screen.c src/devices/controller.c src/devices/mouse.c src/devices/file.c src/devices/datetime.c src/uxn11.c -o bin/uxn11 -lX11
3 
4 echo "Running.."
5-bin/uxn11 etc/mouse.rom
6+bin/uxn11 ~/roms/left.rom # etc/mouse.rom
+24, -19
 1@@ -117,6 +117,22 @@ hide_cursor(void)
 2 #define XK_Control 0xffe3
 3 #define XK_Alt 0xffe9
 4 
 5+static Uint8
 6+get_button(KeySym sym)
 7+{
 8+	switch(sym) {
 9+	case XK_Up: return 0x10;
10+	case XK_Down: return 0x20;
11+	case XK_Left: return 0x40;
12+	case XK_Right: return 0x80;
13+	case XK_Control: return 0x01;
14+	case XK_Alt: return 0x02;
15+	case XK_Shift: return 0x04;
16+	case XK_Home: return 0x08;
17+	}
18+	return 0x00;
19+}
20+
21 static void
22 processEvent(void)
23 {
24@@ -134,29 +150,18 @@ processEvent(void)
25 	} break;
26 	case KeyPress: {
27 		XKeyPressedEvent *e = (XKeyPressedEvent *)&ev;
28+		KeySym sym;
29 		char buf[7];
30-		if(e->keycode == XKeysymToKeycode(display, XK_Escape)) exit(0);
31-		if(e->keycode == XKeysymToKeycode(display, XK_Up)) controller_down(devctrl, 0x10);
32-		if(e->keycode == XKeysymToKeycode(display, XK_Down)) controller_down(devctrl, 0x20);
33-		if(e->keycode == XKeysymToKeycode(display, XK_Left)) controller_down(devctrl, 0x40);
34-		if(e->keycode == XKeysymToKeycode(display, XK_Right)) controller_down(devctrl, 0x80);
35-		if(e->keycode == XKeysymToKeycode(display, XK_Control)) controller_down(devctrl, 0x01);
36-		if(e->keycode == XKeysymToKeycode(display, XK_Alt)) controller_down(devctrl, 0x02);
37-		if(e->keycode == XKeysymToKeycode(display, XK_Shift)) controller_down(devctrl, 0x04);
38-		if(e->keycode == XKeysymToKeycode(display, XK_Home)) controller_down(devctrl, 0x08);
39-		XLookupString(e, buf, 7, NULL, NULL);
40-		controller_key(devctrl, buf[0]);
41+		XLookupString(e, buf, 7, &sym, 0);
42+		controller_down(devctrl, get_button(sym));
43+		controller_key(devctrl, sym < 0x80 ? sym : buf[0]);
44 	} break;
45 	case KeyRelease: {
46 		XKeyPressedEvent *e = (XKeyPressedEvent *)&ev;
47-		if(e->keycode == XKeysymToKeycode(display, XK_Up)) controller_up(devctrl, 0x10);
48-		if(e->keycode == XKeysymToKeycode(display, XK_Down)) controller_up(devctrl, 0x20);
49-		if(e->keycode == XKeysymToKeycode(display, XK_Left)) controller_up(devctrl, 0x40);
50-		if(e->keycode == XKeysymToKeycode(display, XK_Right)) controller_up(devctrl, 0x80);
51-		if(e->keycode == XKeysymToKeycode(display, XK_Control)) controller_up(devctrl, 0x01);
52-		if(e->keycode == XKeysymToKeycode(display, XK_Alt)) controller_up(devctrl, 0x02);
53-		if(e->keycode == XKeysymToKeycode(display, XK_Shift)) controller_up(devctrl, 0x04);
54-		if(e->keycode == XKeysymToKeycode(display, XK_Home)) controller_up(devctrl, 0x08);
55+		KeySym sym;
56+		char buf[7];
57+		XLookupString(e, buf, 7, &sym, 0);
58+		controller_up(devctrl, get_button(sym));
59 	} break;
60 	case ButtonPress: {
61 		XButtonPressedEvent *e = (XButtonPressedEvent *)&ev;