From c7c5cacc846eaf43339bbb733d17aaeb5b7d1cd4 Mon Sep 17 00:00:00 2001 From: Arsinikk <61759217+andrikpowell@users.noreply.github.com> Date: Sat, 21 Dec 2024 13:38:50 -0600 Subject: [PATCH] Add horizontal mouse wheel support (#544) --- prboom2/src/SDL/i_video.c | 23 +++++++++++++---------- prboom2/src/doomdef.h | 2 ++ prboom2/src/m_menu.c | 2 ++ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/prboom2/src/SDL/i_video.c b/prboom2/src/SDL/i_video.c index 3b6d2fe36..b84b8dd3c 100644 --- a/prboom2/src/SDL/i_video.c +++ b/prboom2/src/SDL/i_video.c @@ -361,19 +361,22 @@ static void I_GetEvent(void) case SDL_MOUSEWHEEL: if (mouse_enabled && window_focused) { - if (Event->wheel.y > 0) - { - event.data1.i = KEYD_MWHEELUP; - - event.type = ev_keydown; - D_PostEvent(&event); + int mouseb; - event.type = ev_keyup; - D_PostEvent(&event); - } + if (Event->wheel.y > 0) + mouseb = KEYD_MWHEELUP; else if (Event->wheel.y < 0) + mouseb = KEYD_MWHEELDOWN; + else if (Event->wheel.x < 0) + mouseb = KEYD_MWHEELLEFT; + else if (Event->wheel.x > 0) + mouseb = KEYD_MWHEELRIGHT; + else + mouseb = 0; + + if(mouseb) { - event.data1.i = KEYD_MWHEELDOWN; + event.data1.i = mouseb; event.type = ev_keydown; D_PostEvent(&event); diff --git a/prboom2/src/doomdef.h b/prboom2/src/doomdef.h index 1b71a57e2..c5b43c9b2 100644 --- a/prboom2/src/doomdef.h +++ b/prboom2/src/doomdef.h @@ -396,6 +396,8 @@ typedef enum { #define KEYD_MOUSE3 (0x80 + 0x62) #define KEYD_MWHEELUP (0x80 + 0x6b) #define KEYD_MWHEELDOWN (0x80 + 0x6c) +#define KEYD_MWHEELLEFT (0X80 + 0X6d) +#define KEYD_MWHEELRIGHT (0X80 + 0X6e) // phares 3/20/98: // diff --git a/prboom2/src/m_menu.c b/prboom2/src/m_menu.c index 408214c5f..cd6c74352 100644 --- a/prboom2/src/m_menu.c +++ b/prboom2/src/m_menu.c @@ -4000,6 +4000,8 @@ int M_GetKeyString(int c,int offset) case KEYD_PAUSE: s = "PAUS"; break; case KEYD_MWHEELDOWN: s = "MWDN"; break; case KEYD_MWHEELUP: s = "MWUP"; break; + case KEYD_MWHEELLEFT: s = "MWLT"; break; + case KEYD_MWHEELRIGHT: s = "MWRT"; break; case KEYD_PRINTSC: s = "PRSC"; break; case 0: s = "NONE"; break; default: s = "JUNK"; break;