commit f494421

neauoire  ·  2022-03-27 03:20:29 +0000 UTC
parent a34ceda
Implemented controller
3 files changed,  +16, -16
+0, -0
+0, -0
+16, -16
 1@@ -67,6 +67,16 @@ load(Uxn *u, char *filepath)
 2 	return 1;
 3 }
 4 
 5+void
 6+redraw(Display *display, Visual *visual, Window window)
 7+{
 8+	XImage *ximage;
 9+	screen_redraw(&uxn_screen, uxn_screen.pixels);
10+	ximage = XCreateImage(display, visual, DefaultDepth(display, DefaultScreen(display)), ZPixmap, 0, (char *)uxn_screen.pixels, uxn_screen.width, uxn_screen.height, 32, 0);
11+	XPutImage(display, window, DefaultGC(display, 0), ximage, 0, 0, 0, 0, uxn_screen.width, uxn_screen.height);
12+	/* XDestroyImage(ximage); */
13+}
14+
15 /* /usr/include/X11/keysymdef.h */
16 
17 #define XK_Left 0xff51
18@@ -80,13 +90,13 @@ load(Uxn *u, char *filepath)
19 #define XK_Alt 0xffe9
20 
21 void
22-processEvent(Display *display, Window window, XImage *ximage, int width, int height)
23+processEvent(Display *display, Visual *visual, Window window)
24 {
25 	XEvent ev;
26 	XNextEvent(display, &ev);
27 	switch(ev.type) {
28 	case Expose:
29-		XPutImage(display, window, DefaultGC(display, 0), ximage, 0, 0, 0, 0, width, height);
30+		redraw(display, visual, window);
31 		break;
32 	case KeyPress: {
33 		XKeyPressedEvent *e = (XKeyPressedEvent *)&ev;
34@@ -113,6 +123,9 @@ processEvent(Display *display, Window window, XImage *ximage, int width, int hei
35 	case ButtonPress:
36 		exit(0);
37 	}
38+	if(uxn_screen.fg.changed || uxn_screen.bg.changed) {
39+		redraw(display, visual, window);
40+	}
41 }
42 
43 static int
44@@ -139,11 +152,6 @@ start(Uxn *u)
45 	return 1;
46 }
47 
48-void
49-redraw(void)
50-{
51-}
52-
53 int
54 main(int argc, char **argv)
55 {
56@@ -161,9 +169,6 @@ main(int argc, char **argv)
57 	if(!uxn_eval(&u, PAGE_PROGRAM))
58 		return error("Boot", "Failed to start rom.");
59 
60-	screen_redraw(&uxn_screen, uxn_screen.pixels);
61-
62-	XImage *ximage;
63 	Display *display = XOpenDisplay(NULL);
64 	Visual *visual = DefaultVisual(display, 0);
65 	Window window = XCreateSimpleWindow(display, RootWindow(display, 0), 0, 0, uxn_screen.width, uxn_screen.height, 1, 0, 0);
66@@ -172,15 +177,10 @@ main(int argc, char **argv)
67 		exit(1);
68 	}
69 
70-	ximage = XCreateImage(display, visual, DefaultDepth(display, DefaultScreen(display)), ZPixmap, 0, (char *)uxn_screen.pixels, uxn_screen.width, uxn_screen.height, 32, 0);
71-
72 	XSelectInput(display, window, ButtonPressMask | ExposureMask | KeyPressMask | KeyReleaseMask);
73 	XMapWindow(display, window);
74 	while(1) {
75-		processEvent(display, window, ximage, uxn_screen.width, uxn_screen.height);
76-
77-		if(uxn_screen.fg.changed || uxn_screen.bg.changed)
78-			redraw();
79+		processEvent(display, visual, window);
80 	}
81 	return 0;
82 }