diff --git a/src/window/input.cpp b/src/window/input.cpp index a4b4a913..8738f1fd 100644 --- a/src/window/input.cpp +++ b/src/window/input.cpp @@ -40,21 +40,22 @@ static std::unordered_map mousecodes { {"left", GLFW_MOUSE_BUTTON_1}, {"right", GLFW_MOUSE_BUTTON_2}, {"middle", GLFW_MOUSE_BUTTON_3}, + {"side1", GLFW_MOUSE_BUTTON_4}, + {"side2", GLFW_MOUSE_BUTTON_5}, + {"side3", GLFW_MOUSE_BUTTON_6}, + {"side4", GLFW_MOUSE_BUTTON_7}, + {"side5", GLFW_MOUSE_BUTTON_8}, }; static std::unordered_map keynames {}; +static std::unordered_map buttonsnames{}; std::string input_util::get_name(mousecode code) { - switch (code) { - case mousecode::BUTTON_1: - return "left"; - case mousecode::BUTTON_2: - return "right"; - case mousecode::BUTTON_3: - return "middle"; - default: - return "unknown"; + auto found = buttonsnames.find(static_cast(code)); + if (found == buttonsnames.end()) { + return "unknown"; } + return found->second; } std::string input_util::get_name(keycode code) { @@ -91,6 +92,9 @@ void input_util::initialize() { for (const auto& entry : keycodes) { keynames[entry.second] = entry.first; } + for (const auto& entry : mousecodes) { + buttonsnames[entry.second] = entry.first; + } } keycode input_util::keycode_from(const std::string& name) { @@ -210,6 +214,13 @@ std::string input_util::to_string(mousecode code) { return "RMB"; case mousecode::BUTTON_3: return "MMB"; + case mousecode::BUTTON_4: + case mousecode::BUTTON_5: + case mousecode::BUTTON_6: + case mousecode::BUTTON_7: + case mousecode::BUTTON_8: + return "XButton " + std::to_string(static_cast(code) - + static_cast(mousecode::BUTTON_3)); default: return "unknown button"; } diff --git a/src/window/input.hpp b/src/window/input.hpp index ca532e82..0f94fca3 100644 --- a/src/window/input.hpp +++ b/src/window/input.hpp @@ -102,11 +102,17 @@ enum class mousecode : int { BUTTON_1 = 0, // Left mouse button BUTTON_2 = 1, // Right mouse button BUTTON_3 = 2, // Middle mouse button + BUTTON_4 = 3, // Side mouse button 1 + BUTTON_5 = 4, // Side mouse button 2 + BUTTON_6 = 5, // Side mouse button 3 + BUTTON_7 = 6, // Side mouse button 4 + BUTTON_8 = 7, // Side mouse button 5 UNKNOWN = -1, }; inline mousecode MOUSECODES_ALL[] { - mousecode::BUTTON_1, mousecode::BUTTON_2, mousecode::BUTTON_3}; + mousecode::BUTTON_1, mousecode::BUTTON_2, mousecode::BUTTON_3, mousecode::BUTTON_4, + mousecode::BUTTON_5, mousecode::BUTTON_6, mousecode::BUTTON_7, mousecode::BUTTON_8 }; namespace input_util { void initialize();