Aric Stewart : dinput: Add OS/X sliders.

Alexandre Julliard julliard at winehq.org
Wed Mar 11 10:04:37 CDT 2009


Module: wine
Branch: master
Commit: ae16df651f304fd56fa24a6697d01ab4a0ddf3ba
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ae16df651f304fd56fa24a6697d01ab4a0ddf3ba

Author: Aric Stewart <aric at codeweavers.com>
Date:   Tue Mar 10 15:00:03 2009 -0500

dinput: Add OS/X sliders.

---

 dlls/dinput/joystick_osx.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/dlls/dinput/joystick_osx.c b/dlls/dinput/joystick_osx.c
index 4faf621..ea5ad63 100644
--- a/dlls/dinput/joystick_osx.c
+++ b/dlls/dinput/joystick_osx.c
@@ -289,6 +289,7 @@ static void get_osx_device_elements(JoystickImpl *device, int axis_map[8])
     IOHIDDeviceRef  tIOHIDDeviceRef;
     CFArrayRef      gElementCFArrayRef;
     DWORD           axes = 0;
+    DWORD           sliders = 0;
     DWORD           buttons = 0;
     DWORD           povs = 0;
 
@@ -343,6 +344,11 @@ static void get_osx_device_elements(JoystickImpl *device, int axis_map[8])
                             povs++;
                             break;
                         }
+                        case kHIDUsage_GD_Slider:
+                            sliders ++;
+                            if (sliders > 2)
+                                break;
+                            /* fallthrough, sliders are axis */
                         case kHIDUsage_GD_X:
                         case kHIDUsage_GD_Y:
                         case kHIDUsage_GD_Z:
@@ -413,6 +419,7 @@ static void poll_osx_device_state(JoystickGenericImpl *device_in)
     {
         int button_idx = 0;
         int pov_idx = 0;
+        int slider_idx = 0;
         CFIndex idx, cnt = CFArrayGetCount( gElementCFArrayRef );
 
         for ( idx = 0; idx < cnt; idx++ )
@@ -455,6 +462,7 @@ static void poll_osx_device_state(JoystickGenericImpl *device_in)
                         case kHIDUsage_GD_Rx:
                         case kHIDUsage_GD_Ry:
                         case kHIDUsage_GD_Rz:
+                        case kHIDUsage_GD_Slider:
                         {
                             IOHIDDeviceGetValue(tIOHIDDeviceRef, tIOHIDElementRef, &valueRef);
                             val = IOHIDValueGetIntegerValue(valueRef);
@@ -478,6 +486,10 @@ static void poll_osx_device_state(JoystickGenericImpl *device_in)
                             case kHIDUsage_GD_Rz:
                                 device->generic.js.lRz = joystick_map_axis(&device->generic.props[idx], val);
                                 break;
+                            case kHIDUsage_GD_Slider:
+                                device->generic.js.rglSlider[slider_idx] = joystick_map_axis(&device->generic.props[idx], val);
+                                slider_idx ++;
+                                break;
                             }
                             break;
                         }
@@ -585,6 +597,7 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
     LPDIDATAFORMAT df = NULL;
     int idx = 0;
     int axis_map[8]; /* max axes */
+    int slider_count = 0;
 
     TRACE("%s %p %p %p %hu\n", debugstr_guid(rguid), jvt, dinput, pdev, index);
 
@@ -644,6 +657,10 @@ static HRESULT alloc_device(REFGUID rguid, const void *jvt, IDirectInputImpl *di
             case kHIDUsage_GD_Rx: wine_obj = 3; break;
             case kHIDUsage_GD_Ry: wine_obj = 4; break;
             case kHIDUsage_GD_Rz: wine_obj = 5; break;
+            case kHIDUsage_GD_Slider:
+                wine_obj = 6 + slider_count;
+                slider_count++;
+                break;
         }
         if (wine_obj < 0 ) continue;
 




More information about the wine-cvs mailing list