Makes joystick button ordering predictable.
Fixes unpredictable or unintentional joystick button ordering by sorting buttons according to their HID Usage property. This allows SFML to adhere to a manufacturer's (or driver implentation's) intended button ordering.
This commit is contained in:
parent
26fa99f197
commit
8e4091f9af
@ -30,6 +30,14 @@
|
|||||||
#include <SFML/Window/OSX/HIDInputManager.hpp>
|
#include <SFML/Window/OSX/HIDInputManager.hpp>
|
||||||
#include <SFML/Window/OSX/HIDJoystickManager.hpp>
|
#include <SFML/Window/OSX/HIDJoystickManager.hpp>
|
||||||
|
|
||||||
|
// Translation unit namespace
|
||||||
|
namespace {
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
bool JoystickButtonSortPredicate(IOHIDElementRef b1, IOHIDElementRef b2)
|
||||||
|
{
|
||||||
|
return IOHIDElementGetUsage(b1) < IOHIDElementGetUsage(b2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
namespace sf
|
namespace sf
|
||||||
{
|
{
|
||||||
@ -218,6 +226,10 @@ bool JoystickImpl::open(unsigned int index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure that the buttons will be indexed in the same order as their
|
||||||
|
// HID Usage (assigned by manufacturer and/or a driver).
|
||||||
|
std::sort(m_buttons.begin(), m_buttons.end(), JoystickButtonSortPredicate);
|
||||||
|
|
||||||
// Note : Joy::AxisPovX/Y are not supported (yet).
|
// Note : Joy::AxisPovX/Y are not supported (yet).
|
||||||
// Maybe kIOHIDElementTypeInput_Axis is the corresponding type but I can't test.
|
// Maybe kIOHIDElementTypeInput_Axis is the corresponding type but I can't test.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user