aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-05-21 13:42:22 +0200
committerBad Diode <bd@badd10de.dev>2021-05-21 13:42:22 +0200
commitf59f673a721cf833bafed0705d2db01cd1f358a7 (patch)
tree7069af534163ade587a7048814d8c2c9c937087a /src
parent65cf69fab1c90b5581f277761bd9342f1c7b4d84 (diff)
downloaduxngba-f59f673a721cf833bafed0705d2db01cd1f358a7.tar.gz
uxngba-f59f673a721cf833bafed0705d2db01cd1f358a7.zip
Update mouse handling to enable chording
Diffstat (limited to 'src')
-rw-r--r--src/main.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/main.c b/src/main.c
index 8a694a8..6f5034b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -199,19 +199,29 @@ handle_input(Uxn *u) {
199 evaluxn(u, mempeek16(devctrl->dat, 0)); 199 evaluxn(u, mempeek16(devctrl->dat, 0));
200 devctrl->dat[3] = 0; 200 devctrl->dat[3] = 0;
201 } else if (control_method == CONTROL_MOUSE) { 201 } else if (control_method == CONTROL_MOUSE) {
202 devmouse->dat[7] = 0x00; 202 // Detect "mouse key press".
203 Uint8 flag = devmouse->dat[6];
203 if (key_pressed(KEY_B) | key_hold(KEY_B)) { 204 if (key_pressed(KEY_B) | key_hold(KEY_B)) {
204 devmouse->dat[6] |= 0x01; 205 flag |= 0x01;
205 devmouse->dat[7] = 0x01;
206 } else { 206 } else {
207 devmouse->dat[6] &= ~0x01; 207 flag &= ~0x01;
208 } 208 }
209 if (key_pressed(KEY_A) | key_hold(KEY_A)) { 209 if (key_pressed(KEY_A) | key_hold(KEY_A)) {
210 devmouse->dat[6] |= 0x10; 210 flag |= 0x10;
211 devmouse->dat[7] = 0x10;
212 } else { 211 } else {
213 devmouse->dat[6] &= ~0x10; 212 flag &= ~0x10;
214 } 213 }
214
215 // Handle chording.
216 devmouse->dat[6] = flag;
217 if(flag == 0x10 && (devmouse->dat[6] & 0x01)) {
218 devmouse->dat[7] = 0x01;
219 }
220 if(flag == 0x01 && (devmouse->dat[6] & 0x10)) {
221 devmouse->dat[7] = 0x10;
222 }
223
224 // Detect mouse movement.
215 if (key_pressed(KEY_UP) | key_hold(KEY_UP)) { 225 if (key_pressed(KEY_UP) | key_hold(KEY_UP)) {
216 mouse.y = CLAMP(mouse.y - MOUSE_DELTA, 0, SCREEN_HEIGHT - 8); 226 mouse.y = CLAMP(mouse.y - MOUSE_DELTA, 0, SCREEN_HEIGHT - 8);
217 } 227 }
@@ -224,6 +234,8 @@ handle_input(Uxn *u) {
224 if (key_pressed(KEY_RIGHT) | key_hold(KEY_RIGHT)) { 234 if (key_pressed(KEY_RIGHT) | key_hold(KEY_RIGHT)) {
225 mouse.x = CLAMP(mouse.x + MOUSE_DELTA, 0, SCREEN_WIDTH - 8); 235 mouse.x = CLAMP(mouse.x + MOUSE_DELTA, 0, SCREEN_WIDTH - 8);
226 } 236 }
237
238 // Eval mouse.
227 mempoke16(devmouse->dat, 0x2, mouse.x); 239 mempoke16(devmouse->dat, 0x2, mouse.x);
228 mempoke16(devmouse->dat, 0x4, mouse.y); 240 mempoke16(devmouse->dat, 0x4, mouse.y);
229 evaluxn(u, mempeek16(devmouse->dat, 0)); 241 evaluxn(u, mempeek16(devmouse->dat, 0));