aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2022-03-05 20:01:18 +0100
committerBad Diode <bd@badd10de.dev>2022-03-05 20:01:18 +0100
commitea6b535a408e2218bd44b0e97881865096d00e23 (patch)
tree83b1b1d143081a9ecc922c9b2552de7cf55d4049
parentce07c0539cf6ff9821de52157d6f867dbf9b8d03 (diff)
downloaduxnfb-ea6b535a408e2218bd44b0e97881865096d00e23.tar.gz
uxnfb-ea6b535a408e2218bd44b0e97881865096d00e23.zip
Add initial implementation of mouse buttons
-rw-r--r--src/main.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/main.c b/src/main.c
index 22e9797..b9100ab 100644
--- a/src/main.c
+++ b/src/main.c
@@ -38,9 +38,7 @@ time_elapsed(Time since){
38typedef struct Mouse { 38typedef struct Mouse {
39 s32 x; 39 s32 x;
40 s32 y; 40 s32 y;
41 bool left; 41 u8 buttons;
42 bool mid;
43 bool right;
44 bool update; 42 bool update;
45} Mouse; 43} Mouse;
46 44
@@ -110,9 +108,26 @@ poll_mouse(void) {
110 in.mouse.y = CLAMP( 108 in.mouse.y = CLAMP(
111 in.mouse.y + (s32)mouse_event.value, 0, (s32)screen_height); 109 in.mouse.y + (s32)mouse_event.value, 0, (s32)screen_height);
112 } 110 }
111 } else if (mouse_event.type == EV_KEY) {
112 switch (mouse_event.code) {
113 case BTN_LEFT: {
114 if (mouse_event.value == 1) {
115 in.mouse.buttons |= 0x01
116 } else {
117 in.mouse.buttons &= ~0x01
118 }
119 } break;
120 case BTN_RIGHT: {
121 if (mouse_event.value == 1) {
122 in.mouse.buttons |= 0x10
123 } else {
124 in.mouse.buttons &= ~0x10
125 }
126 } break;
127 default: break;
128 }
113 } 129 }
114 in.mouse.update = true; 130 in.mouse.update = true;
115 // TODO: Handle mouse keys
116 // DEBUG: 131 // DEBUG:
117 // printf("MOUSE: (type: %d, code: %d, value: %d)\n", 132 // printf("MOUSE: (type: %d, code: %d, value: %d)\n",
118 // mouse_event.type, mouse_event.code, mouse_event.value); 133 // mouse_event.type, mouse_event.code, mouse_event.value);
@@ -274,7 +289,16 @@ handle_keyboard(void) {
274void 289void
275handle_mouse(void) { 290handle_mouse(void) {
276 if (in.mouse.update) { 291 if (in.mouse.update) {
277 // TODO: Handle mouse keys 292 // Handle mouse keys.
293 devmouse->dat[6] = in.mouse.buttons;
294 if(in.mouse.buttons == 0x10 && (devmouse->dat[6] & 0x01)) {
295 devmouse->dat[7] = 0x01;
296 }
297 if(in.mouse.buttons == 0x01 && (devmouse->dat[6] & 0x10)) {
298 devmouse->dat[7] = 0x10;
299 }
300
301 // Handle mouse location.
278 mempoke16(devmouse->dat, 0x2, in.mouse.x); 302 mempoke16(devmouse->dat, 0x2, in.mouse.x);
279 mempoke16(devmouse->dat, 0x4, in.mouse.y); 303 mempoke16(devmouse->dat, 0x4, in.mouse.y);
280 uxn_eval(&u, mempeek16(devmouse->dat, 0)); 304 uxn_eval(&u, mempeek16(devmouse->dat, 0));