uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 89c07988acc63dee7c7c4706de492301cb94267d
parent 13fd0d9724519dfeba86693d28ad90c32d7c902c
Author: neauoire <aliceffekt@gmail.com>
Date:   Sun, 26 Dec 2021 21:02:24 -0800

Moved mouse to devices/

Diffstat:
Mbuild.sh | 4+++-
Asrc/devices/mouse.c | 45+++++++++++++++++++++++++++++++++++++++++++++
Asrc/devices/mouse.h | 16++++++++++++++++
Msrc/uxnemu.c | 40++++++++++------------------------------
4 files changed, 74 insertions(+), 31 deletions(-)

diff --git a/build.sh b/build.sh @@ -20,6 +20,8 @@ then clang-format -i src/devices/apu.c clang-format -i src/devices/file.h clang-format -i src/devices/file.c + clang-format -i src/devices/mouse.h + clang-format -i src/devices/mouse.c clang-format -i src/uxnasm.c clang-format -i src/uxnemu.c clang-format -i src/uxncli.c @@ -62,7 +64,7 @@ fi echo "Building.." ${CC} ${CFLAGS} src/uxnasm.c -o bin/uxnasm -${CC} ${CFLAGS} ${CORE} src/devices/file.c src/devices/ppu.c src/devices/apu.c src/uxnemu.c ${EXTRA} ${UXNEMU_LDFLAGS} -o bin/uxnemu +${CC} ${CFLAGS} ${CORE} src/devices/file.c src/devices/mouse.c src/devices/ppu.c src/devices/apu.c src/uxnemu.c ${EXTRA} ${UXNEMU_LDFLAGS} -o bin/uxnemu ${CC} ${CFLAGS} ${CORE} src/devices/file.c src/uxncli.c -o bin/uxncli if [ -d "$HOME/bin" ] diff --git a/src/devices/mouse.c b/src/devices/mouse.c @@ -0,0 +1,44 @@ +#include "../uxn.h" +#include "mouse.h" + +/* +Copyright (c) 2021 Devine Lu Linvega +Copyright (c) 2021 Andrew Alderwick + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE. +*/ + +void +mouse_xy(Device *d, Uint16 x, Uint16 y) +{ + poke16(d->dat, 0x2, x); + poke16(d->dat, 0x4, y); + uxn_eval(d->u, d->vector); +} + +void +mouse_z(Device *d, Uint8 z) +{ + d->dat[7] = z; + uxn_eval(d->u, d->vector); + d->dat[7] = 0x00; +} + +void +mouse_down(Device *d, Uint8 mask) +{ + d->dat[6] |= mask; + uxn_eval(d->u, d->vector); +} + +void +mouse_up(Device *d, Uint8 mask) +{ + d->dat[6] &= (~mask); + uxn_eval(d->u, d->vector); +} +\ No newline at end of file diff --git a/src/devices/mouse.h b/src/devices/mouse.h @@ -0,0 +1,16 @@ +/* +Copyright (c) 2021 Devine Lu Linvega +Copyright (c) 2021 Andrew Alderwick + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE. +*/ + +void mouse_xy(Device *d, Uint16 x, Uint16 y); +void mouse_z(Device *d, Uint8 z); +void mouse_down(Device *d, Uint8 mask); +void mouse_up(Device *d, Uint8 mask); diff --git a/src/uxnemu.c b/src/uxnemu.c @@ -11,6 +11,7 @@ #include "devices/ppu.h" #include "devices/apu.h" #include "devices/file.h" +#include "devices/mouse.h" #pragma GCC diagnostic pop #pragma clang diagnostic pop @@ -196,33 +197,6 @@ init(void) return 1; } -static void -domouse(SDL_Event *event) -{ - Uint8 flag = 0x00; - Uint16 x = clamp(event->motion.x - PAD, 0, ppu.width - 1); - Uint16 y = clamp(event->motion.y - PAD, 0, ppu.height - 1); - if(event->type == SDL_MOUSEWHEEL) { - devmouse->dat[7] = event->wheel.y; - return; - } - poke16(devmouse->dat, 0x2, x); - poke16(devmouse->dat, 0x4, y); - devmouse->dat[7] = 0x00; - switch(event->button.button) { - case SDL_BUTTON_LEFT: flag = 0x01; break; - case SDL_BUTTON_RIGHT: flag = 0x10; break; - } - switch(event->type) { - case SDL_MOUSEBUTTONDOWN: - devmouse->dat[6] |= flag; - break; - case SDL_MOUSEBUTTONUP: - devmouse->dat[6] &= (~flag); - break; - } -} - #pragma mark - Devices static Uint8 @@ -494,7 +468,6 @@ run(Uxn *u) doctrl(u, &event, event.type == SDL_KEYDOWN); uxn_eval(u, devctrl->vector); devctrl->dat[3] = 0; - if(event.type == SDL_KEYDOWN) { ksym = event.key.keysym.sym; if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 1 && ksym == event.key.keysym.sym) @@ -502,11 +475,18 @@ run(Uxn *u) } break; case SDL_MOUSEWHEEL: + mouse_z(devmouse, event.wheel.y); + break; case SDL_MOUSEBUTTONUP: + mouse_up(devmouse, 0x1 << (event.button.button - 1)); + break; case SDL_MOUSEBUTTONDOWN: + mouse_down(devmouse, 0x1 << (event.button.button - 1)); + break; case SDL_MOUSEMOTION: - domouse(&event); - uxn_eval(u, devmouse->vector); + mouse_xy(devmouse, + clamp(event.motion.x - PAD, 0, ppu.width - 1), + clamp(event.motion.y - PAD, 0, ppu.height - 1)); break; case SDL_WINDOWEVENT: if(event.window.event == SDL_WINDOWEVENT_EXPOSED)