diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-21 13:42:22 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-21 13:42:22 +0200 |
commit | f59f673a721cf833bafed0705d2db01cd1f358a7 (patch) | |
tree | 7069af534163ade587a7048814d8c2c9c937087a /src | |
parent | 65cf69fab1c90b5581f277761bd9342f1c7b4d84 (diff) | |
download | uxngba-f59f673a721cf833bafed0705d2db01cd1f358a7.tar.gz uxngba-f59f673a721cf833bafed0705d2db01cd1f358a7.zip |
Update mouse handling to enable chording
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -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)); |