From ebf190b6605a3d1dbe48d4da5309e2b59943a228 Mon Sep 17 00:00:00 2001 From: kimci86 Date: Sun, 10 Dec 2023 17:41:54 +0100 Subject: [PATCH] Make Joystick::Axis a scoped enumeration --- include/SFML/Window/Joystick.hpp | 6 +- src/SFML/Window/FreeBSD/JoystickImpl.cpp | 38 ++++----- src/SFML/Window/Joystick.cpp | 4 +- src/SFML/Window/NetBSD/JoystickImpl.cpp | 38 ++++----- src/SFML/Window/Unix/JoystickImpl.cpp | 34 ++++---- src/SFML/Window/Win32/JoystickImpl.cpp | 100 ++++++++++++----------- src/SFML/Window/WindowImpl.cpp | 9 +- src/SFML/Window/macOS/JoystickImpl.cpp | 30 +++---- test/Window/Joystick.test.cpp | 32 ++++---- 9 files changed, 146 insertions(+), 145 deletions(-) diff --git a/include/SFML/Window/Joystick.hpp b/include/SFML/Window/Joystick.hpp index 817585f40..a06bd6318 100644 --- a/include/SFML/Window/Joystick.hpp +++ b/include/SFML/Window/Joystick.hpp @@ -51,7 +51,7 @@ static constexpr unsigned int AxisCount{8}; //!< Maximum number of supported /// \brief Axes supported by SFML joysticks /// //////////////////////////////////////////////////////////// -enum Axis +enum class Axis { X, //!< The X axis Y, //!< The Y axis @@ -199,13 +199,13 @@ SFML_WINDOW_API void update(); /// unsigned int buttons = sf::Joystick::getButtonCount(0); /// /// // Does joystick #0 define a X axis? -/// bool hasX = sf::Joystick::hasAxis(0, sf::Joystick::X); +/// bool hasX = sf::Joystick::hasAxis(0, sf::Joystick::Axis::X); /// /// // Is button #2 pressed on joystick #0? /// bool pressed = sf::Joystick::isButtonPressed(0, 2); /// /// // What's the current position of the Y axis on joystick #0? -/// float position = sf::Joystick::getAxisPosition(0, sf::Joystick::Y); +/// float position = sf::Joystick::getAxisPosition(0, sf::Joystick::Axis::Y); /// \endcode /// /// \see sf::Keyboard, sf::Mouse diff --git a/src/SFML/Window/FreeBSD/JoystickImpl.cpp b/src/SFML/Window/FreeBSD/JoystickImpl.cpp index 20c67f3ec..29101ea6f 100644 --- a/src/SFML/Window/FreeBSD/JoystickImpl.cpp +++ b/src/SFML/Window/FreeBSD/JoystickImpl.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -135,31 +136,31 @@ void updatePluggedList() } } -int usageToAxis(int usage) +std::optional usageToAxis(int usage) { switch (usage) { case HUG_X: - return sf::Joystick::X; + return sf::Joystick::Axis::X; case HUG_Y: - return sf::Joystick::Y; + return sf::Joystick::Axis::Y; case HUG_Z: - return sf::Joystick::Z; + return sf::Joystick::Axis::Z; case HUG_RZ: - return sf::Joystick::R; + return sf::Joystick::Axis::R; case HUG_RX: - return sf::Joystick::U; + return sf::Joystick::Axis::U; case HUG_RY: - return sf::Joystick::V; + return sf::Joystick::Axis::V; default: - return -1; + return std::nullopt; } } void hatValueToSfml(int value, sf::priv::JoystickState& state) { - state.axes[sf::Joystick::PovX] = static_cast(hatValueMap[value].first); - state.axes[sf::Joystick::PovY] = static_cast(hatValueMap[value].second); + state.axes[static_cast(sf::Joystick::Axis::PovX)] = static_cast(hatValueMap[value].first); + state.axes[static_cast(sf::Joystick::Axis::PovY)] = static_cast(hatValueMap[value].second); } } // namespace @@ -268,16 +269,14 @@ JoystickCaps JoystickImpl::getCapabilities() const } else if (usage == HUP_GENERIC_DESKTOP) { - int axis = usageToAxis(usage); - if (usage == HUG_HAT_SWITCH) { - caps.axes[Joystick::PovX] = true; - caps.axes[Joystick::PovY] = true; + caps.axes[static_cast(Joystick::Axis::PovX)] = true; + caps.axes[static_cast(Joystick::Axis::PovY)] = true; } - else if (axis != -1) + else if (const std::optional axis = usageToAxis(usage)) { - caps.axes[axis] = true; + caps.axes[static_cast(*axis)] = true; } } } @@ -323,19 +322,18 @@ JoystickState JoystickImpl::JoystickImpl::update() else if (usage == HUP_GENERIC_DESKTOP) { int value = hid_get_data(m_buffer.data(), &item); - int axis = usageToAxis(usage); if (usage == HUG_HAT_SWITCH) { hatValueToSfml(value, m_state); } - else if (axis != -1) + else if (const std::optional axis = usageToAxis(usage)) { int minimum = item.logical_minimum; int maximum = item.logical_maximum; - value = (value - minimum) * 200 / (maximum - minimum) - 100; - m_state.axes[axis] = static_cast(value); + value = (value - minimum) * 200 / (maximum - minimum) - 100; + m_state.axes[static_cast(*axis)] = static_cast(value); } } } diff --git a/src/SFML/Window/Joystick.cpp b/src/SFML/Window/Joystick.cpp index 9989e3e8a..ec00c875f 100644 --- a/src/SFML/Window/Joystick.cpp +++ b/src/SFML/Window/Joystick.cpp @@ -50,7 +50,7 @@ unsigned int Joystick::getButtonCount(unsigned int joystick) //////////////////////////////////////////////////////////// bool Joystick::hasAxis(unsigned int joystick, Axis axis) { - return priv::JoystickManager::getInstance().getCapabilities(joystick).axes[axis]; + return priv::JoystickManager::getInstance().getCapabilities(joystick).axes[static_cast(axis)]; } @@ -65,7 +65,7 @@ bool Joystick::isButtonPressed(unsigned int joystick, unsigned int button) //////////////////////////////////////////////////////////// float Joystick::getAxisPosition(unsigned int joystick, Axis axis) { - return priv::JoystickManager::getInstance().getState(joystick).axes[axis]; + return priv::JoystickManager::getInstance().getState(joystick).axes[static_cast(axis)]; } diff --git a/src/SFML/Window/NetBSD/JoystickImpl.cpp b/src/SFML/Window/NetBSD/JoystickImpl.cpp index e62ba3489..5366b2fa7 100644 --- a/src/SFML/Window/NetBSD/JoystickImpl.cpp +++ b/src/SFML/Window/NetBSD/JoystickImpl.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -136,31 +137,31 @@ void updatePluggedList() } } -int usageToAxis(int usage) +std::optional usageToAxis(int usage) { switch (usage) { case HUG_X: - return sf::Joystick::X; + return sf::Joystick::Axis::X; case HUG_Y: - return sf::Joystick::Y; + return sf::Joystick::Axis::Y; case HUG_Z: - return sf::Joystick::Z; + return sf::Joystick::Axis::Z; case HUG_RZ: - return sf::Joystick::R; + return sf::Joystick::Axis::R; case HUG_RX: - return sf::Joystick::U; + return sf::Joystick::Axis::U; case HUG_RY: - return sf::Joystick::V; + return sf::Joystick::Axis::V; default: - return -1; + return std::nullopt; } } void hatValueToSfml(int value, sf::priv::JoystickState& state) { - state.axes[sf::Joystick::PovX] = hatValueMap[value].first; - state.axes[sf::Joystick::PovY] = hatValueMap[value].second; + state.axes[static_cast(sf::Joystick::Axis::PovX)] = static_cast(hatValueMap[value].first); + state.axes[static_cast(sf::Joystick::Axis::PovY)] = static_cast(hatValueMap[value].second); } } // namespace @@ -273,16 +274,14 @@ JoystickCaps JoystickImpl::getCapabilities() const } else if (usage == HUP_GENERIC_DESKTOP) { - int axis = usageToAxis(usage); - if (usage == HUG_HAT_SWITCH) { - caps.axes[Joystick::PovX] = true; - caps.axes[Joystick::PovY] = true; + caps.axes[static_cast(Joystick::Axis::PovX)] = true; + caps.axes[static_cast(Joystick::Axis::PovY)] = true; } - else if (axis != -1) + else if (const std::optional axis = usageToAxis(usage)) { - caps.axes[axis] = true; + caps.axes[static_cast(*axis)] = true; } } } @@ -328,19 +327,18 @@ JoystickState JoystickImpl::JoystickImpl::update() else if (usage == HUP_GENERIC_DESKTOP) { int value = hid_get_data(m_buffer.data(), &item); - int axis = usageToAxis(usage); if (usage == HUG_HAT_SWITCH) { hatValueToSfml(value, m_state); } - else if (axis != -1) + else if (const std::optional axis = usageToAxis(usage)) { int minimum = item.logical_minimum; int maximum = item.logical_maximum; - value = (value - minimum) * 200 / (maximum - minimum) - 100; - m_state.axes[axis] = value; + value = (value - minimum) * 200 / (maximum - minimum) - 100; + m_state.axes[static_cast(*axis)] = value; } } } diff --git a/src/SFML/Window/Unix/JoystickImpl.cpp b/src/SFML/Window/Unix/JoystickImpl.cpp index 112e70af8..c2de13672 100644 --- a/src/SFML/Window/Unix/JoystickImpl.cpp +++ b/src/SFML/Window/Unix/JoystickImpl.cpp @@ -603,17 +603,17 @@ JoystickCaps JoystickImpl::getCapabilities() const switch (m_mapping[i]) { // clang-format off - case ABS_X: caps.axes[Joystick::X] = true; break; - case ABS_Y: caps.axes[Joystick::Y] = true; break; + case ABS_X: caps.axes[static_cast(Joystick::Axis::X)] = true; break; + case ABS_Y: caps.axes[static_cast(Joystick::Axis::Y)] = true; break; case ABS_Z: - case ABS_THROTTLE: caps.axes[Joystick::Z] = true; break; + case ABS_THROTTLE: caps.axes[static_cast(Joystick::Axis::Z)] = true; break; case ABS_RZ: - case ABS_RUDDER: caps.axes[Joystick::R] = true; break; - case ABS_RX: caps.axes[Joystick::U] = true; break; - case ABS_RY: caps.axes[Joystick::V] = true; break; - case ABS_HAT0X: caps.axes[Joystick::PovX] = true; break; - case ABS_HAT0Y: caps.axes[Joystick::PovY] = true; break; - default: break; + case ABS_RUDDER: caps.axes[static_cast(Joystick::Axis::R)] = true; break; + case ABS_RX: caps.axes[static_cast(Joystick::Axis::U)] = true; break; + case ABS_RY: caps.axes[static_cast(Joystick::Axis::V)] = true; break; + case ABS_HAT0X: caps.axes[static_cast(Joystick::Axis::PovX)] = true; break; + case ABS_HAT0Y: caps.axes[static_cast(Joystick::Axis::PovY)] = true; break; + default: break; // clang-format on } } @@ -655,30 +655,30 @@ JoystickState JoystickImpl::JoystickImpl::update() switch (m_mapping[joyState.number]) { case ABS_X: - m_state.axes[Joystick::X] = value; + m_state.axes[static_cast(Joystick::Axis::X)] = value; break; case ABS_Y: - m_state.axes[Joystick::Y] = value; + m_state.axes[static_cast(Joystick::Axis::Y)] = value; break; case ABS_Z: case ABS_THROTTLE: - m_state.axes[Joystick::Z] = value; + m_state.axes[static_cast(Joystick::Axis::Z)] = value; break; case ABS_RZ: case ABS_RUDDER: - m_state.axes[Joystick::R] = value; + m_state.axes[static_cast(Joystick::Axis::R)] = value; break; case ABS_RX: - m_state.axes[Joystick::U] = value; + m_state.axes[static_cast(Joystick::Axis::U)] = value; break; case ABS_RY: - m_state.axes[Joystick::V] = value; + m_state.axes[static_cast(Joystick::Axis::V)] = value; break; case ABS_HAT0X: - m_state.axes[Joystick::PovX] = value; + m_state.axes[static_cast(Joystick::Axis::PovX)] = value; break; case ABS_HAT0Y: - m_state.axes[Joystick::PovY] = value; + m_state.axes[static_cast(Joystick::Axis::PovY)] = value; break; default: break; diff --git a/src/SFML/Window/Win32/JoystickImpl.cpp b/src/SFML/Window/Win32/JoystickImpl.cpp index 6e952dbdf..9b9026e0a 100644 --- a/src/SFML/Window/Win32/JoystickImpl.cpp +++ b/src/SFML/Window/Win32/JoystickImpl.cpp @@ -331,14 +331,14 @@ JoystickCaps JoystickImpl::getCapabilities() const if (caps.buttonCount > Joystick::ButtonCount) caps.buttonCount = Joystick::ButtonCount; - caps.axes[Joystick::X] = true; - caps.axes[Joystick::Y] = true; - caps.axes[Joystick::Z] = (m_caps.wCaps & JOYCAPS_HASZ) != 0; - caps.axes[Joystick::R] = (m_caps.wCaps & JOYCAPS_HASR) != 0; - caps.axes[Joystick::U] = (m_caps.wCaps & JOYCAPS_HASU) != 0; - caps.axes[Joystick::V] = (m_caps.wCaps & JOYCAPS_HASV) != 0; - caps.axes[Joystick::PovX] = (m_caps.wCaps & JOYCAPS_HASPOV) != 0; - caps.axes[Joystick::PovY] = (m_caps.wCaps & JOYCAPS_HASPOV) != 0; + caps.axes[static_cast(Joystick::Axis::X)] = true; + caps.axes[static_cast(Joystick::Axis::Y)] = true; + caps.axes[static_cast(Joystick::Axis::Z)] = (m_caps.wCaps & JOYCAPS_HASZ) != 0; + caps.axes[static_cast(Joystick::Axis::R)] = (m_caps.wCaps & JOYCAPS_HASR) != 0; + caps.axes[static_cast(Joystick::Axis::U)] = (m_caps.wCaps & JOYCAPS_HASU) != 0; + caps.axes[static_cast(Joystick::Axis::V)] = (m_caps.wCaps & JOYCAPS_HASV) != 0; + caps.axes[static_cast(Joystick::Axis::PovX)] = (m_caps.wCaps & JOYCAPS_HASPOV) != 0; + caps.axes[static_cast(Joystick::Axis::PovY)] = (m_caps.wCaps & JOYCAPS_HASPOV) != 0; return caps; } @@ -379,30 +379,36 @@ JoystickState JoystickImpl::update() state.connected = true; // Axes - state.axes[Joystick::X] = (static_cast(pos.dwXpos) - static_cast(m_caps.wXmax + m_caps.wXmin) / 2.f) * - 200.f / static_cast(m_caps.wXmax - m_caps.wXmin); - state.axes[Joystick::Y] = (static_cast(pos.dwYpos) - static_cast(m_caps.wYmax + m_caps.wYmin) / 2.f) * - 200.f / static_cast(m_caps.wYmax - m_caps.wYmin); - state.axes[Joystick::Z] = (static_cast(pos.dwZpos) - static_cast(m_caps.wZmax + m_caps.wZmin) / 2.f) * - 200.f / static_cast(m_caps.wZmax - m_caps.wZmin); - state.axes[Joystick::R] = (static_cast(pos.dwRpos) - static_cast(m_caps.wRmax + m_caps.wRmin) / 2.f) * - 200.f / static_cast(m_caps.wRmax - m_caps.wRmin); - state.axes[Joystick::U] = (static_cast(pos.dwUpos) - static_cast(m_caps.wUmax + m_caps.wUmin) / 2.f) * - 200.f / static_cast(m_caps.wUmax - m_caps.wUmin); - state.axes[Joystick::V] = (static_cast(pos.dwVpos) - static_cast(m_caps.wVmax + m_caps.wVmin) / 2.f) * - 200.f / static_cast(m_caps.wVmax - m_caps.wVmin); + state.axes[static_cast(Joystick::Axis::X)] = (static_cast(pos.dwXpos) - + static_cast(m_caps.wXmax + m_caps.wXmin) / 2.f) * + 200.f / static_cast(m_caps.wXmax - m_caps.wXmin); + state.axes[static_cast(Joystick::Axis::Y)] = (static_cast(pos.dwYpos) - + static_cast(m_caps.wYmax + m_caps.wYmin) / 2.f) * + 200.f / static_cast(m_caps.wYmax - m_caps.wYmin); + state.axes[static_cast(Joystick::Axis::Z)] = (static_cast(pos.dwZpos) - + static_cast(m_caps.wZmax + m_caps.wZmin) / 2.f) * + 200.f / static_cast(m_caps.wZmax - m_caps.wZmin); + state.axes[static_cast(Joystick::Axis::R)] = (static_cast(pos.dwRpos) - + static_cast(m_caps.wRmax + m_caps.wRmin) / 2.f) * + 200.f / static_cast(m_caps.wRmax - m_caps.wRmin); + state.axes[static_cast(Joystick::Axis::U)] = (static_cast(pos.dwUpos) - + static_cast(m_caps.wUmax + m_caps.wUmin) / 2.f) * + 200.f / static_cast(m_caps.wUmax - m_caps.wUmin); + state.axes[static_cast(Joystick::Axis::V)] = (static_cast(pos.dwVpos) - + static_cast(m_caps.wVmax + m_caps.wVmin) / 2.f) * + 200.f / static_cast(m_caps.wVmax - m_caps.wVmin); // Special case for POV, it is given as an angle if (pos.dwPOV != 0xFFFF) { - const float angle = static_cast(pos.dwPOV) / 18000.f * 3.141592654f; - state.axes[Joystick::PovX] = std::sin(angle) * 100; - state.axes[Joystick::PovY] = std::cos(angle) * 100; + const float angle = static_cast(pos.dwPOV) / 18000.f * 3.141592654f; + state.axes[static_cast(Joystick::Axis::PovX)] = std::sin(angle) * 100; + state.axes[static_cast(Joystick::Axis::PovY)] = std::cos(angle) * 100; } else { - state.axes[Joystick::PovX] = 0; - state.axes[Joystick::PovY] = 0; + state.axes[static_cast(Joystick::Axis::PovX)] = 0; + state.axes[static_cast(Joystick::Axis::PovY)] = 0; } // Buttons @@ -925,7 +931,7 @@ JoystickState JoystickImpl::updateDInputBuffered() { if (m_axes[j] == static_cast(events[i].dwOfs)) { - if ((j == Joystick::PovX) || (j == Joystick::PovY)) + if ((j == static_cast(Joystick::Axis::PovX)) || (j == static_cast(Joystick::Axis::PovY))) { const unsigned short value = LOWORD(events[i].dwData); @@ -933,13 +939,13 @@ JoystickState JoystickImpl::updateDInputBuffered() { const float angle = (static_cast(value)) * 3.141592654f / DI_DEGREES / 180.f; - m_state.axes[Joystick::PovX] = std::sin(angle) * 100.f; - m_state.axes[Joystick::PovY] = std::cos(angle) * 100.f; + m_state.axes[static_cast(Joystick::Axis::PovX)] = std::sin(angle) * 100.f; + m_state.axes[static_cast(Joystick::Axis::PovY)] = std::cos(angle) * 100.f; } else { - m_state.axes[Joystick::PovX] = 0.f; - m_state.axes[Joystick::PovY] = 0.f; + m_state.axes[static_cast(Joystick::Axis::PovX)] = 0.f; + m_state.axes[static_cast(Joystick::Axis::PovY)] = 0.f; } } else @@ -1014,7 +1020,7 @@ JoystickState JoystickImpl::updateDInputPolled() { if (m_axes[i] != -1) { - if ((i == Joystick::PovX) || (i == Joystick::PovY)) + if ((i == static_cast(Joystick::Axis::PovX)) || (i == static_cast(Joystick::Axis::PovY))) { const unsigned short value = LOWORD( *reinterpret_cast(reinterpret_cast(&joystate) + m_axes[i])); @@ -1023,13 +1029,13 @@ JoystickState JoystickImpl::updateDInputPolled() { const float angle = (static_cast(value)) * 3.141592654f / DI_DEGREES / 180.f; - state.axes[Joystick::PovX] = std::sin(angle) * 100.f; - state.axes[Joystick::PovY] = std::cos(angle) * 100.f; + state.axes[static_cast(Joystick::Axis::PovX)] = std::sin(angle) * 100.f; + state.axes[static_cast(Joystick::Axis::PovY)] = std::cos(angle) * 100.f; } else { - state.axes[Joystick::PovX] = 0.f; - state.axes[Joystick::PovY] = 0.f; + state.axes[static_cast(Joystick::Axis::PovX)] = 0.f; + state.axes[static_cast(Joystick::Axis::PovY)] = 0.f; } } else @@ -1097,23 +1103,23 @@ BOOL CALLBACK JoystickImpl::deviceObjectEnumerationCallback(const DIDEVICEOBJECT { // Axes if (deviceObjectInstance->guidType == guids::GUID_XAxis) - joystick.m_axes[Joystick::X] = DIJOFS_X; + joystick.m_axes[static_cast(Joystick::Axis::X)] = DIJOFS_X; else if (deviceObjectInstance->guidType == guids::GUID_YAxis) - joystick.m_axes[Joystick::Y] = DIJOFS_Y; + joystick.m_axes[static_cast(Joystick::Axis::Y)] = DIJOFS_Y; else if (deviceObjectInstance->guidType == guids::GUID_ZAxis) - joystick.m_axes[Joystick::Z] = DIJOFS_Z; + joystick.m_axes[static_cast(Joystick::Axis::Z)] = DIJOFS_Z; else if (deviceObjectInstance->guidType == guids::GUID_RzAxis) - joystick.m_axes[Joystick::R] = DIJOFS_RZ; + joystick.m_axes[static_cast(Joystick::Axis::R)] = DIJOFS_RZ; else if (deviceObjectInstance->guidType == guids::GUID_RxAxis) - joystick.m_axes[Joystick::U] = DIJOFS_RX; + joystick.m_axes[static_cast(Joystick::Axis::U)] = DIJOFS_RX; else if (deviceObjectInstance->guidType == guids::GUID_RyAxis) - joystick.m_axes[Joystick::V] = DIJOFS_RY; + joystick.m_axes[static_cast(Joystick::Axis::V)] = DIJOFS_RY; else if (deviceObjectInstance->guidType == guids::GUID_Slider) { - if (joystick.m_axes[Joystick::U] == -1) - joystick.m_axes[Joystick::U] = DIJOFS_SLIDER(0); + if (joystick.m_axes[static_cast(Joystick::Axis::U)] == -1) + joystick.m_axes[static_cast(Joystick::Axis::U)] = DIJOFS_SLIDER(0); else - joystick.m_axes[Joystick::V] = DIJOFS_SLIDER(1); + joystick.m_axes[static_cast(Joystick::Axis::V)] = DIJOFS_SLIDER(1); } else return DIENUM_CONTINUE; @@ -1139,10 +1145,10 @@ BOOL CALLBACK JoystickImpl::deviceObjectEnumerationCallback(const DIDEVICEOBJECT // POVs if (deviceObjectInstance->guidType == guids::GUID_POV) { - if (joystick.m_axes[Joystick::PovX] == -1) + if (joystick.m_axes[static_cast(Joystick::Axis::PovX)] == -1) { - joystick.m_axes[Joystick::PovX] = DIJOFS_POV(0); - joystick.m_axes[Joystick::PovY] = DIJOFS_POV(0); + joystick.m_axes[static_cast(Joystick::Axis::PovX)] = DIJOFS_POV(0); + joystick.m_axes[static_cast(Joystick::Axis::PovY)] = DIJOFS_POV(0); } } diff --git a/src/SFML/Window/WindowImpl.cpp b/src/SFML/Window/WindowImpl.cpp index 74ab06058..2b0de3b61 100644 --- a/src/SFML/Window/WindowImpl.cpp +++ b/src/SFML/Window/WindowImpl.cpp @@ -252,19 +252,18 @@ void WindowImpl::processJoystickEvents() { if (caps.axes[j]) { - const auto axis = static_cast(j); - const float prevPos = m_previousAxes[i][axis]; - const float currPos = m_joystickStatesImpl->states[i].axes[axis]; + const float prevPos = m_previousAxes[i][j]; + const float currPos = m_joystickStatesImpl->states[i].axes[j]; if (std::abs(currPos - prevPos) >= m_joystickThreshold) { Event event; event.type = Event::JoystickMoved; event.joystickMove.joystickId = i; - event.joystickMove.axis = axis; + event.joystickMove.axis = static_cast(j); event.joystickMove.position = currPos; pushEvent(event); - m_previousAxes[i][axis] = currPos; + m_previousAxes[i][j] = currPos; } } } diff --git a/src/SFML/Window/macOS/JoystickImpl.cpp b/src/SFML/Window/macOS/JoystickImpl.cpp index 87d776182..4d99aa1a9 100644 --- a/src/SFML/Window/macOS/JoystickImpl.cpp +++ b/src/SFML/Window/macOS/JoystickImpl.cpp @@ -236,22 +236,22 @@ bool JoystickImpl::open(unsigned int index) switch (IOHIDElementGetUsage(element)) { case kHIDUsage_GD_X: - m_axis[Joystick::X] = element; + m_axis[Joystick::Axis::X] = element; break; case kHIDUsage_GD_Y: - m_axis[Joystick::Y] = element; + m_axis[Joystick::Axis::Y] = element; break; case kHIDUsage_GD_Z: - m_axis[Joystick::Z] = element; + m_axis[Joystick::Axis::Z] = element; break; case kHIDUsage_GD_Rx: - m_axis[Joystick::U] = element; + m_axis[Joystick::Axis::U] = element; break; case kHIDUsage_GD_Ry: - m_axis[Joystick::V] = element; + m_axis[Joystick::Axis::V] = element; break; case kHIDUsage_GD_Rz: - m_axis[Joystick::R] = element; + m_axis[Joystick::Axis::R] = element; break; case kHIDUsage_GD_Hatswitch: @@ -377,10 +377,10 @@ JoystickCaps JoystickImpl::getCapabilities() const // Axis: for (const auto& [axis, iohidElementRef] : m_axis) - caps.axes[axis] = true; + caps.axes[static_cast(axis)] = true; if (m_hat != nullptr) - caps.axes[Joystick::PovX] = caps.axes[Joystick::PovY] = true; + caps.axes[static_cast(Joystick::Axis::PovX)] = caps.axes[static_cast(Joystick::Axis::PovY)] = true; return caps; } @@ -480,7 +480,7 @@ JoystickState JoystickImpl::update() const double physicalValue = IOHIDValueGetScaledValue(value, kIOHIDValueScaleTypePhysical); const auto scaledValue = static_cast( (((physicalValue - physicalMin) * (scaledMax - scaledMin)) / (physicalMax - physicalMin)) + scaledMin); - state.axes[axis] = scaledValue; + state.axes[static_cast(axis)] = scaledValue; } // Update POV/Hat state. Assuming model described in `open`, values are: @@ -508,17 +508,17 @@ JoystickState JoystickImpl::update() case 1: case 2: case 3: - state.axes[Joystick::PovX] = +100; + state.axes[static_cast(Joystick::Axis::PovX)] = +100; break; case 5: case 6: case 7: - state.axes[Joystick::PovX] = -100; + state.axes[static_cast(Joystick::Axis::PovX)] = -100; break; default: - state.axes[Joystick::PovX] = 0; + state.axes[static_cast(Joystick::Axis::PovX)] = 0; break; } @@ -528,17 +528,17 @@ JoystickState JoystickImpl::update() case 0: case 1: case 7: - state.axes[Joystick::PovY] = +100; + state.axes[static_cast(Joystick::Axis::PovY)] = +100; break; case 3: case 4: case 5: - state.axes[Joystick::PovY] = -100; + state.axes[static_cast(Joystick::Axis::PovY)] = -100; break; default: - state.axes[Joystick::PovY] = 0; + state.axes[static_cast(Joystick::Axis::PovY)] = 0; break; } } diff --git a/test/Window/Joystick.test.cpp b/test/Window/Joystick.test.cpp index 0ebfeb926..f5462bde6 100644 --- a/test/Window/Joystick.test.cpp +++ b/test/Window/Joystick.test.cpp @@ -38,14 +38,14 @@ TEST_CASE("[Window] sf::Joystick") SECTION("hasAxis()") { - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::X)); - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Y)); - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Z)); - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::R)); - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::U)); - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::V)); - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::PovX)); - CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::PovY)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::X)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::Y)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::Z)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::R)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::U)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::V)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::PovX)); + CHECK(!sf::Joystick::hasAxis(joystick, sf::Joystick::Axis::PovY)); } SECTION("isButtonPressed()") @@ -56,14 +56,14 @@ TEST_CASE("[Window] sf::Joystick") SECTION("getAxisPosition") { - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::X) == 0); - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Y) == 0); - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Z) == 0); - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::R) == 0); - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::U) == 0); - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::V) == 0); - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::PovX) == 0); - CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::PovY) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::X) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::Y) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::Z) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::R) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::U) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::V) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::PovX) == 0); + CHECK(sf::Joystick::getAxisPosition(joystick, sf::Joystick::Axis::PovY) == 0); } SECTION("getIdentification()")