testaudio: Make program usable without a 3-button mouse.

This commit is contained in:
Ryan C. Gordon
2023-10-11 10:01:52 -04:00
parent 321fc18417
commit bb2f767f5d

View File

@@ -113,6 +113,9 @@ static Thing *mouseover_thing = NULL;
static Thing *droppable_highlighted_thing = NULL; static Thing *droppable_highlighted_thing = NULL;
static Thing *dragging_thing = NULL; static Thing *dragging_thing = NULL;
static int dragging_button = -1; 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 *physdev_texture = NULL;
static Texture *logdev_texture = NULL; static Texture *logdev_texture = NULL;
@@ -1077,11 +1080,21 @@ static void Loop(void)
thing = UpdateMouseOver(event.motion.x, event.motion.y); thing = UpdateMouseOver(event.motion.x, event.motion.y);
if ((dragging_button == -1) && event.motion.state) { if ((dragging_button == -1) && event.motion.state) {
if (event.motion.state & SDL_BUTTON_LMASK) { 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) { } else if (event.motion.state & SDL_BUTTON_RMASK) {
dragging_button = SDL_BUTTON_RIGHT; dragging_button = SDL_BUTTON_RIGHT;
dragging_button_real = SDL_BUTTON_RIGHT;
} else if (event.motion.state & SDL_BUTTON_MMASK) { } else if (event.motion.state & SDL_BUTTON_MMASK) {
dragging_button = SDL_BUTTON_MIDDLE; dragging_button = SDL_BUTTON_MIDDLE;
dragging_button_real = SDL_BUTTON_MIDDLE;
} }
@@ -1117,10 +1130,11 @@ static void Loop(void)
break; break;
case SDL_EVENT_MOUSE_BUTTON_UP: case SDL_EVENT_MOUSE_BUTTON_UP:
if (dragging_button == event.button.button) { if (dragging_button_real == event.button.button) {
Thing *dropped_thing = dragging_thing; Thing *dropped_thing = dragging_thing;
dragging_thing = NULL; dragging_thing = NULL;
dragging_button = -1; dragging_button = -1;
dragging_button_real = -1;
if (dropped_thing && dropped_thing->ondrop) { if (dropped_thing && dropped_thing->ondrop) {
dropped_thing->ondrop(dropped_thing, event.button.button, event.button.x, event.button.y); 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); UpdateMouseOver(event.wheel.mouseX, event.wheel.mouseY);
break; 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: case SDL_EVENT_DROP_FILE:
SDL_Log("Drop file! '%s'", event.drop.file); SDL_Log("Drop file! '%s'", event.drop.file);
LoadWavThing(event.drop.file, event.drop.x, event.drop.y); LoadWavThing(event.drop.file, event.drop.x, event.drop.y);