summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCameron Cawley <ccawley2011@gmail.com>2019-07-06 16:55:52 +0100
committerwm4 <1387750+wm4@users.noreply.github.com>2019-10-28 17:14:49 +0100
commitf4c04f5a3ce36c49feb4ab9bf8cf77a79df78806 (patch)
treef4b3ca9b38cac9c547e9712b211640ab9d4f468e
parentd51e6371508866137f4f12e7b4553fef8d39989f (diff)
downloadmpv-f4c04f5a3ce36c49feb4ab9bf8cf77a79df78806.tar.bz2
mpv-f4c04f5a3ce36c49feb4ab9bf8cf77a79df78806.tar.xz
vo_sdl: Improve mouse button input
SDL_BUTTON_X1 and SDL_BUTTON_X2 are now correctly mapped to MP_MBTN_BACK and MP_MBTN_FORWARD.
-rw-r--r--video/out/vo_sdl.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/video/out/vo_sdl.c b/video/out/vo_sdl.c
index a6354404d8..257762d147 100644
--- a/video/out/vo_sdl.c
+++ b/video/out/vo_sdl.c
@@ -151,6 +151,18 @@ const struct keymap_entry keys[] = {
{SDLK_F24, MP_KEY_F + 24}
};
+struct mousemap_entry {
+ Uint8 sdl;
+ int mpv;
+};
+const struct mousemap_entry mousebtns[] = {
+ {SDL_BUTTON_LEFT, MP_MBTN_LEFT},
+ {SDL_BUTTON_MIDDLE, MP_MBTN_MID},
+ {SDL_BUTTON_RIGHT, MP_MBTN_RIGHT},
+ {SDL_BUTTON_X1, MP_MBTN_BACK},
+ {SDL_BUTTON_X2, MP_MBTN_FORWARD},
+};
+
struct priv {
SDL_Window *window;
SDL_Renderer *renderer;
@@ -580,14 +592,24 @@ static void wait_events(struct vo *vo, int64_t until_time_us)
case SDL_MOUSEMOTION:
mp_input_set_mouse_pos(vo->input_ctx, ev.motion.x, ev.motion.y);
break;
- case SDL_MOUSEBUTTONDOWN:
- mp_input_put_key(vo->input_ctx,
- (MP_MBTN_BASE + ev.button.button - 1) | MP_KEY_STATE_DOWN);
+ case SDL_MOUSEBUTTONDOWN: {
+ int i;
+ for (i = 0; i < sizeof(mousebtns) / sizeof(mousebtns[0]); ++i)
+ if (mousebtns[i].sdl == ev.button.button) {
+ mp_input_put_key(vo->input_ctx, mousebtns[i].mpv | MP_KEY_STATE_DOWN);
+ break;
+ }
break;
- case SDL_MOUSEBUTTONUP:
- mp_input_put_key(vo->input_ctx,
- (MP_MBTN_BASE + ev.button.button - 1) | MP_KEY_STATE_UP);
+ }
+ case SDL_MOUSEBUTTONUP: {
+ int i;
+ for (i = 0; i < sizeof(mousebtns) / sizeof(mousebtns[0]); ++i)
+ if (mousebtns[i].sdl == ev.button.button) {
+ mp_input_put_key(vo->input_ctx, mousebtns[i].mpv | MP_KEY_STATE_UP);
+ break;
+ }
break;
+ }
case SDL_MOUSEWHEEL: {
#if SDL_VERSION_ATLEAST(2, 0, 4)
double multiplier = ev.wheel.direction == SDL_MOUSEWHEEL_FLIPPED ? -0.1 : 0.1;