Rémi Bernon : dinput: Implement IDirectInputDevice_EnumEffects WtoA conversion.

Alexandre Julliard julliard at winehq.org
Wed May 26 15:46:27 CDT 2021


Module: wine
Branch: master
Commit: 6340a296808128cb2d7f80caac0b47e1f3ea3190
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=6340a296808128cb2d7f80caac0b47e1f3ea3190

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Wed May 26 11:23:06 2021 +0200

dinput: Implement IDirectInputDevice_EnumEffects WtoA conversion.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dinput/ansi.c                | 27 ++++++++++++++
 dlls/dinput/device.c              | 12 -------
 dlls/dinput/joystick_linuxinput.c | 76 +--------------------------------------
 3 files changed, 28 insertions(+), 87 deletions(-)

diff --git a/dlls/dinput/ansi.c b/dlls/dinput/ansi.c
index 36b17812f32..eb331891f25 100644
--- a/dlls/dinput/ansi.c
+++ b/dlls/dinput/ansi.c
@@ -219,6 +219,33 @@ HRESULT WINAPI IDirectInputDevice2AImpl_CreateEffect( IDirectInputDevice8A *ifac
     return IDirectInputDevice8_CreateEffect( iface_w, guid, effect, out, outer );
 }
 
+struct enum_effects_wtoa_params
+{
+    LPDIENUMEFFECTSCALLBACKA callback;
+    void *ref;
+};
+
+static BOOL CALLBACK enum_effects_wtoa_callback( const DIEFFECTINFOW *info_w, void *ref )
+{
+    struct enum_effects_wtoa_params *params = ref;
+    DIEFFECTINFOA info_a = {sizeof(info_a)};
+
+    dieffectinfo_wtoa( info_w, &info_a );
+    return params->callback( &info_a, params->ref );
+}
+
+HRESULT WINAPI IDirectInputDevice2AImpl_EnumEffects( IDirectInputDevice8A *iface_a, LPDIENUMEFFECTSCALLBACKA callback,
+                                                     void *ref, DWORD type )
+{
+    struct enum_effects_wtoa_params params = {callback, ref};
+    IDirectInputDeviceImpl *impl = impl_from_IDirectInputDevice8A( iface_a );
+    IDirectInputDevice8W *iface_w = IDirectInputDevice8W_from_impl( impl );
+
+    if (!callback) return DIERR_INVALIDPARAM;
+
+    return IDirectInputDevice8_EnumEffects( iface_w, enum_effects_wtoa_callback, &params, type );
+}
+
 HRESULT WINAPI IDirectInputDevice2AImpl_GetEffectInfo( IDirectInputDevice8A *iface_a, DIEFFECTINFOA *info_a, REFGUID guid )
 {
     IDirectInputDeviceImpl *impl = impl_from_IDirectInputDevice8A( iface_a );
diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
index 850a4a09c37..abdb235c097 100644
--- a/dlls/dinput/device.c
+++ b/dlls/dinput/device.c
@@ -1587,18 +1587,6 @@ HRESULT WINAPI IDirectInputDevice2WImpl_CreateEffect(LPDIRECTINPUTDEVICE8W iface
     return DIERR_UNSUPPORTED;
 }
 
-HRESULT WINAPI IDirectInputDevice2AImpl_EnumEffects(
-	LPDIRECTINPUTDEVICE8A iface,
-	LPDIENUMEFFECTSCALLBACKA lpCallback,
-	LPVOID lpvRef,
-	DWORD dwFlags)
-{
-    IDirectInputDeviceImpl *This = impl_from_IDirectInputDevice8A(iface);
-    FIXME("%p)->(%p,%p,0x%08x): stub!\n", This, lpCallback, lpvRef, dwFlags);
-
-    return DI_OK;
-}
-
 HRESULT WINAPI IDirectInputDevice2WImpl_EnumEffects(
 	LPDIRECTINPUTDEVICE8W iface,
 	LPDIENUMEFFECTSCALLBACKW lpCallback,
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index dc7f5491c81..307b447d237 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -1093,80 +1093,6 @@ static HRESULT WINAPI JoystickWImpl_CreateEffect(LPDIRECTINPUTDEVICE8W iface, RE
 /*******************************************************************************
  *	EnumEffects - Enumerate available FF effects
  */
-static HRESULT WINAPI JoystickAImpl_EnumEffects(LPDIRECTINPUTDEVICE8A iface,
-						LPDIENUMEFFECTSCALLBACKA lpCallback,
-						LPVOID pvRef,
-						DWORD dwEffType)
-{
-#ifdef HAVE_STRUCT_FF_EFFECT_DIRECTION
-    DIEFFECTINFOA dei; /* feif */
-    DWORD type = DIEFT_GETTYPE(dwEffType);
-    JoystickImpl* This = impl_from_IDirectInputDevice8A(iface);
-
-    TRACE("(this=%p,%p,%d) type=%d\n", This, pvRef, dwEffType, type);
-
-    dei.dwSize = sizeof(DIEFFECTINFOA);          
-
-    if ((type == DIEFT_ALL || type == DIEFT_CONSTANTFORCE)
-	&& test_bit(This->joydev->ffbits, FF_CONSTANT)) {
-	IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_ConstantForce);
-	(*lpCallback)(&dei, pvRef);
-    }
-
-    if ((type == DIEFT_ALL || type == DIEFT_PERIODIC)
-	&& test_bit(This->joydev->ffbits, FF_PERIODIC)) {
-	if (test_bit(This->joydev->ffbits, FF_SQUARE)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_Square);
-	    (*lpCallback)(&dei, pvRef);
-	}
-	if (test_bit(This->joydev->ffbits, FF_SINE)) {
-            IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_Sine);
-	    (*lpCallback)(&dei, pvRef);
-	}
-	if (test_bit(This->joydev->ffbits, FF_TRIANGLE)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_Triangle);
-	    (*lpCallback)(&dei, pvRef);
-	}
-	if (test_bit(This->joydev->ffbits, FF_SAW_UP)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_SawtoothUp);
-	    (*lpCallback)(&dei, pvRef);
-	}
-	if (test_bit(This->joydev->ffbits, FF_SAW_DOWN)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_SawtoothDown);
-	    (*lpCallback)(&dei, pvRef);
-	}
-    } 
-
-    if ((type == DIEFT_ALL || type == DIEFT_RAMPFORCE)
-	&& test_bit(This->joydev->ffbits, FF_RAMP)) {
-        IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_RampForce);
-        (*lpCallback)(&dei, pvRef);
-    }
-
-    if (type == DIEFT_ALL || type == DIEFT_CONDITION) {
-	if (test_bit(This->joydev->ffbits, FF_SPRING)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_Spring);
-	    (*lpCallback)(&dei, pvRef);
-	}
-	if (test_bit(This->joydev->ffbits, FF_DAMPER)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_Damper);
-	    (*lpCallback)(&dei, pvRef);
-	}
-	if (test_bit(This->joydev->ffbits, FF_INERTIA)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_Inertia);
-	    (*lpCallback)(&dei, pvRef);
-	}
-	if (test_bit(This->joydev->ffbits, FF_FRICTION)) {
-	    IDirectInputDevice8_GetEffectInfo(iface, &dei, &GUID_Friction);
-	    (*lpCallback)(&dei, pvRef);
-	}
-    }
-
-#endif
-
-    return DI_OK;
-}
-
 static HRESULT WINAPI JoystickWImpl_EnumEffects(LPDIRECTINPUTDEVICE8W iface,
                                                 LPDIENUMEFFECTSCALLBACKW lpCallback,
                                                 LPVOID pvRef,
@@ -1428,7 +1354,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
 	IDirectInputDevice2AImpl_RunControlPanel,
 	IDirectInputDevice2AImpl_Initialize,
 	IDirectInputDevice2AImpl_CreateEffect,
-	JoystickAImpl_EnumEffects,
+	IDirectInputDevice2AImpl_EnumEffects,
 	IDirectInputDevice2AImpl_GetEffectInfo,
 	IDirectInputDevice2AImpl_GetForceFeedbackState,
 	IDirectInputDevice2AImpl_SendForceFeedbackCommand,




More information about the wine-cvs mailing list