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:
Ryan Fields 2012-10-05 10:26:50 -04:00
parent 26fa99f197
commit 8e4091f9af

View File

@ -30,6 +30,14 @@
#include <SFML/Window/OSX/HIDInputManager.hpp>
#include <SFML/Window/OSX/HIDJoystickManager.hpp>
// Translation unit namespace
namespace {
////////////////////////////////////////////////////////////
bool JoystickButtonSortPredicate(IOHIDElementRef b1, IOHIDElementRef b2)
{
return IOHIDElementGetUsage(b1) < IOHIDElementGetUsage(b2);
}
}
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).
// Maybe kIOHIDElementTypeInput_Axis is the corresponding type but I can't test.