diff options
author | Bad Diode <bd@badd10de.dev> | 2022-03-05 20:01:18 +0100 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-03-05 20:01:18 +0100 |
commit | ea6b535a408e2218bd44b0e97881865096d00e23 (patch) | |
tree | 83b1b1d143081a9ecc922c9b2552de7cf55d4049 | |
parent | ce07c0539cf6ff9821de52157d6f867dbf9b8d03 (diff) | |
download | uxnfb-ea6b535a408e2218bd44b0e97881865096d00e23.tar.gz uxnfb-ea6b535a408e2218bd44b0e97881865096d00e23.zip |
Add initial implementation of mouse buttons
-rw-r--r-- | src/main.c | 34 |
1 files changed, 29 insertions, 5 deletions
@@ -38,9 +38,7 @@ time_elapsed(Time since){ | |||
38 | typedef struct Mouse { | 38 | typedef 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) { | |||
274 | void | 289 | void |
275 | handle_mouse(void) { | 290 | handle_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)); |