diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp index df11d69de..55b868078 100644 --- a/src/sdl_window.cpp +++ b/src/sdl_window.cpp @@ -29,27 +29,18 @@ #include #endif -// +1 and +2 is taken -#define SDL_EVENT_MOUSE_WHEEL_UP SDL_EVENT_MOUSE_WHEEL + 3 -#define SDL_EVENT_MOUSE_WHEEL_DOWN SDL_EVENT_MOUSE_WHEEL + 4 -#define SDL_EVENT_MOUSE_WHEEL_LEFT SDL_EVENT_MOUSE_WHEEL + 5 -#define SDL_EVENT_MOUSE_WHEEL_RIGHT SDL_EVENT_MOUSE_WHEEL + 6 - -#define LEFTJOYSTICK_HALFMODE 0x00010000 -#define RIGHTJOYSTICK_HALFMODE 0x00020000 - Uint32 getMouseWheelEvent(const SDL_Event* event) { if (event->type != SDL_EVENT_MOUSE_WHEEL) return 0; // std::cout << "We got a wheel event! "; if (event->wheel.y > 0) { - return SDL_EVENT_MOUSE_WHEEL_UP; + return SDL_MOUSE_WHEEL_UP; } else if (event->wheel.y < 0) { - return SDL_EVENT_MOUSE_WHEEL_DOWN; + return SDL_MOUSE_WHEEL_DOWN; } else if (event->wheel.x > 0) { - return SDL_EVENT_MOUSE_WHEEL_RIGHT; + return SDL_MOUSE_WHEEL_RIGHT; } else if (event->wheel.x < 0) { - return SDL_EVENT_MOUSE_WHEEL_LEFT; + return SDL_MOUSE_WHEEL_LEFT; } return 0; } @@ -57,157 +48,6 @@ Uint32 getMouseWheelEvent(const SDL_Event* event) { namespace KBMConfig { using Libraries::Pad::OrbisPadButtonDataOffset; -// i strongly suggest you collapse these maps -const std::map string_to_cbutton_map = { - {"triangle", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_TRIANGLE}, - {"circle", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_CIRCLE}, - {"cross", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_CROSS}, - {"square", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_SQUARE}, - {"l1", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_L1}, - {"l2", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_L2}, - {"r1", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_R1}, - {"r2", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_R2}, - {"l3", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_L3}, - {"r3", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_R3}, - {"options", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_OPTIONS}, - {"touchpad", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_TOUCH_PAD}, - {"up", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_UP}, - {"down", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_DOWN}, - {"left", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_LEFT}, - {"right", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_RIGHT}, - {"leftjoystick_halfmode", LEFTJOYSTICK_HALFMODE}, - {"rightjoystick_halfmode", RIGHTJOYSTICK_HALFMODE}, -}; -const std::map string_to_axis_map = { - {"axis_left_x_plus", {Input::Axis::LeftX, 127}}, - {"axis_left_x_minus", {Input::Axis::LeftX, -127}}, - {"axis_left_y_plus", {Input::Axis::LeftY, 127}}, - {"axis_left_y_minus", {Input::Axis::LeftY, -127}}, - {"axis_right_x_plus", {Input::Axis::RightX, 127}}, - {"axis_right_x_minus", {Input::Axis::RightX, -127}}, - {"axis_right_y_plus", {Input::Axis::RightY, 127}}, - {"axis_right_y_minus", {Input::Axis::RightY, -127}}, -}; -const std::map string_to_keyboard_key_map = { - {"a", SDLK_A}, - {"b", SDLK_B}, - {"c", SDLK_C}, - {"d", SDLK_D}, - {"e", SDLK_E}, - {"f", SDLK_F}, - {"g", SDLK_G}, - {"h", SDLK_H}, - {"i", SDLK_I}, - {"j", SDLK_J}, - {"k", SDLK_K}, - {"l", SDLK_L}, - {"m", SDLK_M}, - {"n", SDLK_N}, - {"o", SDLK_O}, - {"p", SDLK_P}, - {"q", SDLK_Q}, - {"r", SDLK_R}, - {"s", SDLK_S}, - {"t", SDLK_T}, - {"u", SDLK_U}, - {"v", SDLK_V}, - {"w", SDLK_W}, - {"x", SDLK_X}, - {"y", SDLK_Y}, - {"z", SDLK_Z}, - {"0", SDLK_0}, - {"1", SDLK_1}, - {"2", SDLK_2}, - {"3", SDLK_3}, - {"4", SDLK_4}, - {"5", SDLK_5}, - {"6", SDLK_6}, - {"7", SDLK_7}, - {"8", SDLK_8}, - {"9", SDLK_9}, - {"kp0", SDLK_KP_0}, - {"kp1", SDLK_KP_1}, - {"kp2", SDLK_KP_2}, - {"kp3", SDLK_KP_3}, - {"kp4", SDLK_KP_4}, - {"kp5", SDLK_KP_5}, - {"kp6", SDLK_KP_6}, - {"kp7", SDLK_KP_7}, - {"kp8", SDLK_KP_8}, - {"kp9", SDLK_KP_9}, - {"comma", SDLK_COMMA}, - {"period", SDLK_PERIOD}, - {"question", SDLK_QUESTION}, - {"semicolon", SDLK_SEMICOLON}, - {"minus", SDLK_MINUS}, - {"underscore", SDLK_UNDERSCORE}, - {"lparenthesis", SDLK_LEFTPAREN}, - {"rparenthesis", SDLK_RIGHTPAREN}, - {"lbracket", SDLK_LEFTBRACKET}, - {"rbracket", SDLK_RIGHTBRACKET}, - {"lbrace", SDLK_LEFTBRACE}, - {"rbrace", SDLK_RIGHTBRACE}, - {"backslash", SDLK_BACKSLASH}, - {"dash", SDLK_SLASH}, - {"enter", SDLK_RETURN}, - {"space", SDLK_SPACE}, - {"tab", SDLK_TAB}, - {"backspace", SDLK_BACKSPACE}, - {"escape", SDLK_ESCAPE}, - {"left", SDLK_LEFT}, - {"right", SDLK_RIGHT}, - {"up", SDLK_UP}, - {"down", SDLK_DOWN}, - {"lctrl", SDLK_LCTRL}, - {"rctrl", SDLK_RCTRL}, - {"lshift", SDLK_LSHIFT}, - {"rshift", SDLK_RSHIFT}, - {"lalt", SDLK_LALT}, - {"ralt", SDLK_RALT}, - {"lmeta", SDLK_LGUI}, - {"rmeta", SDLK_RGUI}, - {"lwin", SDLK_LGUI}, - {"rwin", SDLK_RGUI}, - {"home", SDLK_HOME}, - {"end", SDLK_END}, - {"pgup", SDLK_PAGEUP}, - {"pgdown", SDLK_PAGEDOWN}, - {"leftbutton", SDL_BUTTON_LEFT}, - {"rightbutton", SDL_BUTTON_RIGHT}, - {"middlebutton", SDL_BUTTON_MIDDLE}, - {"sidebuttonback", SDL_BUTTON_X1}, - {"sidebuttonforward", SDL_BUTTON_X2}, - {"mousewheelup", SDL_EVENT_MOUSE_WHEEL_UP}, - {"mousewheeldown", SDL_EVENT_MOUSE_WHEEL_DOWN}, - {"mousewheelleft", SDL_EVENT_MOUSE_WHEEL_LEFT}, - {"mousewheelright", SDL_EVENT_MOUSE_WHEEL_RIGHT}, - {"kpperiod", SDLK_KP_PERIOD}, - {"kpcomma", SDLK_KP_COMMA}, - {"kpdivide", SDLK_KP_DIVIDE}, - {"kpmultiply", SDLK_KP_MULTIPLY}, - {"kpminus", SDLK_KP_MINUS}, - {"kpplus", SDLK_KP_PLUS}, - {"kpenter", SDLK_KP_ENTER}, - {"kpequals", SDLK_KP_EQUALS}, - {"capslock", SDLK_CAPSLOCK}, -}; -const std::map string_to_keyboard_mod_key_map = { - {"lshift", SDL_KMOD_LSHIFT}, {"rshift", SDL_KMOD_RSHIFT}, - {"lctrl", SDL_KMOD_LCTRL}, {"rctrl", SDL_KMOD_RCTRL}, - {"lalt", SDL_KMOD_LALT}, {"ralt", SDL_KMOD_RALT}, - {"shift", SDL_KMOD_SHIFT}, {"ctrl", SDL_KMOD_CTRL}, - {"alt", SDL_KMOD_ALT}, {"l_meta", SDL_KMOD_LGUI}, - {"r_meta", SDL_KMOD_RGUI}, {"meta", SDL_KMOD_GUI}, - {"lwin", SDL_KMOD_LGUI}, {"rwin", SDL_KMOD_RGUI}, - {"win", SDL_KMOD_GUI}, {"capslock", SDL_KMOD_CAPS}, - {"numlock", SDL_KMOD_NUM}, {"none", SDL_KMOD_NONE}, // if you want to be fancy -}; - -// Button map: maps key+modifier to controller button -std::map button_map = {}; -std::map axis_map = {}; -std::map> key_to_modkey_toggle_map = {}; - // i wrapped it in a function so I can collapse it std::string getDefaultKeyboardConfig() { std::string default_config = @@ -276,6 +116,11 @@ axis_left_y_plus = s; return default_config; } +// Button map: maps key+modifier to controller button +std::map button_map = {}; +std::map axis_map = {}; +std::map> key_to_modkey_toggle_map = {}; + // Flags and values for varying purposes int mouse_joystick_binding = 0; float mouse_deadzone_offset = 0.5, mouse_speed = 1, mouse_speed_offset = 0.125; @@ -628,10 +473,6 @@ WindowSDL::WindowSDL(s32 width_, s32 height_, Input::GameController* controller_ #endif // initialize kbm controls parseInputConfig(std::string(Common::ElfInfo::Instance().GameSerial())); - // Start polling the mouse - if (mouse_polling_id == 0) { - mouse_polling_id = SDL_AddTimer(33, mousePolling, (void*)this); - } } WindowSDL::~WindowSDL() = default; @@ -689,14 +530,12 @@ void WindowSDL::waitEvent() { break; } } -<<<<<<< HEAD -======= void WindowSDL::initTimers() { SDL_AddTimer(100, &PollController, controller); + SDL_AddTimer(33, mousePolling, (void*)this); } ->>>>>>> upstreamMain void WindowSDL::onResize() { SDL_GetWindowSizeInPixels(window, &width, &height); ImGui::Core::OnResize(); diff --git a/src/sdl_window.h b/src/sdl_window.h index 624f1b345..53152b10f 100644 --- a/src/sdl_window.h +++ b/src/sdl_window.h @@ -3,12 +3,23 @@ #pragma once +#include #include #include "common/types.h" +#include "core/libraries/pad/pad.h" #include "input/controller.h" #include +// +1 and +2 is taken +#define SDL_MOUSE_WHEEL_UP SDL_EVENT_MOUSE_WHEEL + 3 +#define SDL_MOUSE_WHEEL_DOWN SDL_EVENT_MOUSE_WHEEL + 4 +#define SDL_MOUSE_WHEEL_LEFT SDL_EVENT_MOUSE_WHEEL + 5 +#define SDL_MOUSE_WHEEL_RIGHT SDL_EVENT_MOUSE_WHEEL + 6 + +#define LEFTJOYSTICK_HALFMODE 0x00010000 +#define RIGHTJOYSTICK_HALFMODE 0x00020000 + struct SDL_Window; struct SDL_Gamepad; union SDL_Event; @@ -18,8 +29,6 @@ class GameController; } namespace KBMConfig { -std::string getDefaultKeyboardConfig(); -void parseInputConfig(const std::string game_id); class KeyBinding { public: @@ -36,6 +45,162 @@ struct AxisMapping { Input::Axis axis; int value; // Value to set for key press (+127 or -127 for movement) }; + +std::string getDefaultKeyboardConfig(); +void parseInputConfig(const std::string game_id); + +using Libraries::Pad::OrbisPadButtonDataOffset; +// i strongly suggest you collapse these maps +const std::map string_to_cbutton_map = { + {"triangle", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_TRIANGLE}, + {"circle", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_CIRCLE}, + {"cross", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_CROSS}, + {"square", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_SQUARE}, + {"l1", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_L1}, + {"l2", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_L2}, + {"r1", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_R1}, + {"r2", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_R2}, + {"l3", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_L3}, + {"r3", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_R3}, + {"options", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_OPTIONS}, + {"touchpad", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_TOUCH_PAD}, + {"up", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_UP}, + {"down", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_DOWN}, + {"left", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_LEFT}, + {"right", OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_RIGHT}, + {"leftjoystick_halfmode", LEFTJOYSTICK_HALFMODE}, + {"rightjoystick_halfmode", RIGHTJOYSTICK_HALFMODE}, +}; +const std::map string_to_axis_map = { + {"axis_left_x_plus", {Input::Axis::LeftX, 127}}, + {"axis_left_x_minus", {Input::Axis::LeftX, -127}}, + {"axis_left_y_plus", {Input::Axis::LeftY, 127}}, + {"axis_left_y_minus", {Input::Axis::LeftY, -127}}, + {"axis_right_x_plus", {Input::Axis::RightX, 127}}, + {"axis_right_x_minus", {Input::Axis::RightX, -127}}, + {"axis_right_y_plus", {Input::Axis::RightY, 127}}, + {"axis_right_y_minus", {Input::Axis::RightY, -127}}, +}; +const std::map string_to_keyboard_key_map = { + {"a", SDLK_A}, + {"b", SDLK_B}, + {"c", SDLK_C}, + {"d", SDLK_D}, + {"e", SDLK_E}, + {"f", SDLK_F}, + {"g", SDLK_G}, + {"h", SDLK_H}, + {"i", SDLK_I}, + {"j", SDLK_J}, + {"k", SDLK_K}, + {"l", SDLK_L}, + {"m", SDLK_M}, + {"n", SDLK_N}, + {"o", SDLK_O}, + {"p", SDLK_P}, + {"q", SDLK_Q}, + {"r", SDLK_R}, + {"s", SDLK_S}, + {"t", SDLK_T}, + {"u", SDLK_U}, + {"v", SDLK_V}, + {"w", SDLK_W}, + {"x", SDLK_X}, + {"y", SDLK_Y}, + {"z", SDLK_Z}, + {"0", SDLK_0}, + {"1", SDLK_1}, + {"2", SDLK_2}, + {"3", SDLK_3}, + {"4", SDLK_4}, + {"5", SDLK_5}, + {"6", SDLK_6}, + {"7", SDLK_7}, + {"8", SDLK_8}, + {"9", SDLK_9}, + {"kp0", SDLK_KP_0}, + {"kp1", SDLK_KP_1}, + {"kp2", SDLK_KP_2}, + {"kp3", SDLK_KP_3}, + {"kp4", SDLK_KP_4}, + {"kp5", SDLK_KP_5}, + {"kp6", SDLK_KP_6}, + {"kp7", SDLK_KP_7}, + {"kp8", SDLK_KP_8}, + {"kp9", SDLK_KP_9}, + {"comma", SDLK_COMMA}, + {"period", SDLK_PERIOD}, + {"question", SDLK_QUESTION}, + {"semicolon", SDLK_SEMICOLON}, + {"minus", SDLK_MINUS}, + {"underscore", SDLK_UNDERSCORE}, + {"lparenthesis", SDLK_LEFTPAREN}, + {"rparenthesis", SDLK_RIGHTPAREN}, + {"lbracket", SDLK_LEFTBRACKET}, + {"rbracket", SDLK_RIGHTBRACKET}, + {"lbrace", SDLK_LEFTBRACE}, + {"rbrace", SDLK_RIGHTBRACE}, + {"backslash", SDLK_BACKSLASH}, + {"dash", SDLK_SLASH}, + {"enter", SDLK_RETURN}, + {"space", SDLK_SPACE}, + {"tab", SDLK_TAB}, + {"backspace", SDLK_BACKSPACE}, + {"escape", SDLK_ESCAPE}, + {"left", SDLK_LEFT}, + {"right", SDLK_RIGHT}, + {"up", SDLK_UP}, + {"down", SDLK_DOWN}, + {"lctrl", SDLK_LCTRL}, + {"rctrl", SDLK_RCTRL}, + {"lshift", SDLK_LSHIFT}, + {"rshift", SDLK_RSHIFT}, + {"lalt", SDLK_LALT}, + {"ralt", SDLK_RALT}, + {"lmeta", SDLK_LGUI}, + {"rmeta", SDLK_RGUI}, + {"lwin", SDLK_LGUI}, + {"rwin", SDLK_RGUI}, + {"home", SDLK_HOME}, + {"end", SDLK_END}, + {"pgup", SDLK_PAGEUP}, + {"pgdown", SDLK_PAGEDOWN}, + {"leftbutton", SDL_BUTTON_LEFT}, + {"rightbutton", SDL_BUTTON_RIGHT}, + {"middlebutton", SDL_BUTTON_MIDDLE}, + {"sidebuttonback", SDL_BUTTON_X1}, + {"sidebuttonforward", SDL_BUTTON_X2}, + {"mousewheelup", SDL_MOUSE_WHEEL_UP}, + {"mousewheeldown", SDL_MOUSE_WHEEL_DOWN}, + {"mousewheelleft", SDL_MOUSE_WHEEL_LEFT}, + {"mousewheelright", SDL_MOUSE_WHEEL_RIGHT}, + {"kpperiod", SDLK_KP_PERIOD}, + {"kpcomma", SDLK_KP_COMMA}, + {"kpdivide", SDLK_KP_DIVIDE}, + {"kpmultiply", SDLK_KP_MULTIPLY}, + {"kpminus", SDLK_KP_MINUS}, + {"kpplus", SDLK_KP_PLUS}, + {"kpenter", SDLK_KP_ENTER}, + {"kpequals", SDLK_KP_EQUALS}, + {"capslock", SDLK_CAPSLOCK}, +}; +const std::map string_to_keyboard_mod_key_map = { + {"lshift", SDL_KMOD_LSHIFT}, {"rshift", SDL_KMOD_RSHIFT}, + {"lctrl", SDL_KMOD_LCTRL}, {"rctrl", SDL_KMOD_RCTRL}, + {"lalt", SDL_KMOD_LALT}, {"ralt", SDL_KMOD_RALT}, + {"shift", SDL_KMOD_SHIFT}, {"ctrl", SDL_KMOD_CTRL}, + {"alt", SDL_KMOD_ALT}, {"l_meta", SDL_KMOD_LGUI}, + {"r_meta", SDL_KMOD_RGUI}, {"meta", SDL_KMOD_GUI}, + {"lwin", SDL_KMOD_LGUI}, {"rwin", SDL_KMOD_RGUI}, + {"win", SDL_KMOD_GUI}, {"capslock", SDL_KMOD_CAPS}, + {"numlock", SDL_KMOD_NUM}, {"none", SDL_KMOD_NONE}, // if you want to be fancy +}; + +// Button map: maps key+modifier to controller button +extern std::map button_map; +extern std::map axis_map; +extern std::map> key_to_modkey_toggle_map; + } // namespace KBMConfig namespace Frontend {