From bb2f767f5d7ab239e8483145b68428204260ce5d Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 11 Oct 2023 10:01:52 -0400 Subject: [PATCH] testaudio: Make program usable without a 3-button mouse. --- test/testaudio.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/test/testaudio.c b/test/testaudio.c index 94de78471..3cb71a764 100644 --- a/test/testaudio.c +++ b/test/testaudio.c @@ -113,6 +113,9 @@ static Thing *mouseover_thing = NULL; static Thing *droppable_highlighted_thing = NULL; static Thing *dragging_thing = NULL; static int dragging_button = -1; +static int dragging_button_real = -1; +static SDL_bool ctrl_held = SDL_FALSE; +static SDL_bool alt_held = SDL_FALSE; static Texture *physdev_texture = NULL; static Texture *logdev_texture = NULL; @@ -1077,11 +1080,21 @@ static void Loop(void) thing = UpdateMouseOver(event.motion.x, event.motion.y); if ((dragging_button == -1) && event.motion.state) { if (event.motion.state & SDL_BUTTON_LMASK) { - dragging_button = SDL_BUTTON_LEFT; + /* for people that don't have all three buttons... */ + if (ctrl_held) { + dragging_button = SDL_BUTTON_RIGHT; + } else if (alt_held) { + dragging_button = SDL_BUTTON_MIDDLE; + } else { + dragging_button = SDL_BUTTON_LEFT; + } + dragging_button_real = SDL_BUTTON_LEFT; } else if (event.motion.state & SDL_BUTTON_RMASK) { dragging_button = SDL_BUTTON_RIGHT; + dragging_button_real = SDL_BUTTON_RIGHT; } else if (event.motion.state & SDL_BUTTON_MMASK) { dragging_button = SDL_BUTTON_MIDDLE; + dragging_button_real = SDL_BUTTON_MIDDLE; } @@ -1117,10 +1130,11 @@ static void Loop(void) break; case SDL_EVENT_MOUSE_BUTTON_UP: - if (dragging_button == event.button.button) { + if (dragging_button_real == event.button.button) { Thing *dropped_thing = dragging_thing; dragging_thing = NULL; dragging_button = -1; + dragging_button_real = -1; if (dropped_thing && dropped_thing->ondrop) { dropped_thing->ondrop(dropped_thing, event.button.button, event.button.x, event.button.y); } @@ -1133,6 +1147,12 @@ static void Loop(void) UpdateMouseOver(event.wheel.mouseX, event.wheel.mouseY); break; + case SDL_EVENT_KEY_DOWN: + case SDL_EVENT_KEY_UP: + ctrl_held = ((event.key.keysym.mod & SDL_KMOD_CTRL) != 0) ? SDL_TRUE : SDL_FALSE; + alt_held = ((event.key.keysym.mod & SDL_KMOD_ALT) != 0) ? SDL_TRUE : SDL_FALSE; + break; + case SDL_EVENT_DROP_FILE: SDL_Log("Drop file! '%s'", event.drop.file); LoadWavThing(event.drop.file, event.drop.x, event.drop.y);