From 9eee43d3bb24000077602a62dfdfeee2606f1589 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Thu, 24 Feb 2022 17:55:57 +0100 Subject: Add support for keyboard and mouse --- src/mouse/sdl-1.2/src/mouse.c | 80 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/mouse/sdl-1.2/src/mouse.c (limited to 'src/mouse/sdl-1.2') diff --git a/src/mouse/sdl-1.2/src/mouse.c b/src/mouse/sdl-1.2/src/mouse.c new file mode 100644 index 0000000..381ac0e --- /dev/null +++ b/src/mouse/sdl-1.2/src/mouse.c @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include + +static void mouse_click(const SDL_MouseButtonEvent *const ev, + struct mouse *const m) +{ + int mask; + + switch (ev->button) + { + case 1: + mask = 1 << MOUSE_BUTTON_LEFT; + break; + + case 3: + mask = 1 << MOUSE_BUTTON_RIGHT; + break; + + default: + return; + } + + if (ev->state == SDL_PRESSED) + m->mask |= mask; + else + m->mask &= ~mask; +} + +static void mouse_event(const SDL_MouseMotionEvent *const ev, + struct mouse *const m) +{ + m->x = ev->x; + m->y = ev->y; +} + +void mouse_update(struct mouse *const m) +{ + SDL_Event ev; + int n; + + m->oldmask = m->mask; + + while ((n = SDL_PeepEvents(&ev, 1, SDL_GETEVENT, SDL_MOUSEMOTIONMASK + | SDL_MOUSEBUTTONDOWNMASK | SDL_MOUSEBUTTONUPMASK)) > 0) + { + switch (ev.type) + { + case SDL_MOUSEBUTTONDOWN: + /* Fall through. */ + case SDL_MOUSEBUTTONUP: + mouse_click(&ev.button, m); + break; + + case SDL_MOUSEMOTION: + mouse_event(&ev.motion, m); + break; + + default: + fprintf(stderr, "%s: unexpected SDL_Event %d\n", + __func__, ev.type); + break; + } + } + + if (n < 0) + { + fprintf(stderr, "%s: SDL_PeepEvents: %s\n", + __func__, SDL_GetError()); + return; + } +} + +void mouse_init(struct mouse *const m) +{ + memset(m, 0, sizeof *m); +} -- cgit v1.2.3