Module: wine Branch: master Commit: f457f25b711873cb206662b9b9cc98b0eacfa840 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f457f25b711873cb206662b9b9...
Author: David Lawrie david.dljunk@gmail.com Date: Tue Jun 14 20:33:49 2016 -0700
winejoystick.drv: Fix Slider mapping.
Sliders, Dials, and Wheels now map to Z, U (Ry), or V (Rx) depending on availability. Thus, also add support for up to 3 such HID elements.
Signed-off-by: David Lawrie david.dljunk@gmail.com Signed-off-by: Ken Thomases ken@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/winejoystick.drv/joystick_osx.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/dlls/winejoystick.drv/joystick_osx.c b/dlls/winejoystick.drv/joystick_osx.c index 42046a4..1edd8e9 100644 --- a/dlls/winejoystick.drv/joystick_osx.c +++ b/dlls/winejoystick.drv/joystick_osx.c @@ -442,8 +442,25 @@ static void collect_joystick_elements(joystick_t* joystick, IOHIDElementRef coll break; } case kHIDUsage_GD_Slider: - TRACE("kIOHIDElementTypeInput_Misc / kHIDUsage_GD_Slider; ignoring\n"); + case kHIDUsage_GD_Dial: + case kHIDUsage_GD_Wheel: + { + /* if one axis is taken, fall to the next until axes are filled */ + int possible_axes[3] = {AXIS_Z,AXIS_RY,AXIS_RX}; + int axis = 0; + while(axis < 3 && joystick->axes[possible_axes[axis]].element) + axis++; + if (axis == 3) + TRACE("kIOHIDElementTypeInput_Misc / kHIDUsage_GD_<axis> (%d)\n ignoring\n", usage); + else + { + TRACE("kIOHIDElementTypeInput_Misc / kHIDUsage_GD_<axis> (%d) axis %d\n", usage, possible_axes[axis]); + joystick->axes[possible_axes[axis]].element = (IOHIDElementRef)CFRetain(child); + joystick->axes[possible_axes[axis]].min_value = IOHIDElementGetLogicalMin(child); + joystick->axes[possible_axes[axis]].max_value = IOHIDElementGetLogicalMax(child); + } break; + } default: FIXME("kIOHIDElementTypeInput_Misc / Unhandled usage %d\n", usage); break;