Rémi Bernon : dinput: Move CreateEffect generic implementation to device.c.

Alexandre Julliard julliard at winehq.org
Thu Oct 21 16:04:15 CDT 2021


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

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Thu Oct 21 09:53:45 2021 +0200

dinput: Move CreateEffect generic implementation to device.c.

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

---

 dlls/dinput/device.c         | 41 +++++++++++++++++++++++++++++------------
 dlls/dinput/device_private.h |  1 +
 dlls/dinput/joystick_hid.c   | 41 +++++------------------------------------
 dlls/dinput/keyboard.c       |  1 +
 dlls/dinput/mouse.c          |  1 +
 5 files changed, 37 insertions(+), 48 deletions(-)

diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
index 2a9b9aa596e..e0aa5141067 100644
--- a/dlls/dinput/device.c
+++ b/dlls/dinput/device.c
@@ -1645,20 +1645,37 @@ HRESULT WINAPI IDirectInputDevice2WImpl_Initialize(LPDIRECTINPUTDEVICE8W iface,
     return DI_OK;
 }
 
-/******************************************************************************
- *	IDirectInputDevice2A
- */
-
-HRESULT WINAPI IDirectInputDevice2WImpl_CreateEffect(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPCDIEFFECT lpeff,
-                                                     LPDIRECTINPUTEFFECT *ppdef, LPUNKNOWN pUnkOuter)
+HRESULT WINAPI IDirectInputDevice2WImpl_CreateEffect( IDirectInputDevice8W *iface, const GUID *guid,
+                                                      const DIEFFECT *params, IDirectInputEffect **out,
+                                                      IUnknown *outer )
 {
-    IDirectInputDeviceImpl *This = impl_from_IDirectInputDevice8W(iface);
-    FIXME("(%p)->(%s,%p,%p,%p): stub!\n", This, debugstr_guid(rguid), lpeff, ppdef, pUnkOuter);
-    if (!ppdef) return E_POINTER;
+    IDirectInputDeviceImpl *impl = impl_from_IDirectInputDevice8W( iface );
+    DWORD flags = DIEP_ALLPARAMS;
+    HRESULT hr;
 
-    FIXME("not available in the generic implementation\n");
-    *ppdef = NULL;
-    return DIERR_UNSUPPORTED;
+    TRACE( "iface %p, guid %s, params %p, out %p, outer %p\n", iface, debugstr_guid( guid ),
+           params, out, outer );
+
+    if (!out) return E_POINTER;
+    *out = NULL;
+
+    if (!(impl->caps.dwFlags & DIDC_FORCEFEEDBACK)) return DIERR_UNSUPPORTED;
+    if (!impl->vtbl->create_effect) return DIERR_UNSUPPORTED;
+    if (FAILED(hr = impl->vtbl->create_effect( iface, out ))) return hr;
+
+    hr = IDirectInputEffect_Initialize( *out, DINPUT_instance, impl->dinput->dwVersion, guid );
+    if (FAILED(hr)) goto failed;
+
+    if (!params) return DI_OK;
+    if (!impl->acquired || !(impl->dwCoopLevel & DISCL_EXCLUSIVE)) flags |= DIEP_NODOWNLOAD;
+    hr = IDirectInputEffect_SetParameters( *out, params, flags );
+    if (FAILED(hr)) goto failed;
+    return hr;
+
+failed:
+    IDirectInputEffect_Release( *out );
+    *out = NULL;
+    return hr;
 }
 
 HRESULT WINAPI IDirectInputDevice2WImpl_EnumEffects( IDirectInputDevice8W *iface, LPDIENUMEFFECTSCALLBACKW callback,
diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h
index 0b5919c7ec6..66c51f1672a 100644
--- a/dlls/dinput/device_private.h
+++ b/dlls/dinput/device_private.h
@@ -69,6 +69,7 @@ struct dinput_device_vtbl
     HRESULT (*set_property)( IDirectInputDevice8W *iface, DWORD property, const DIPROPHEADER *header,
                              const DIDEVICEOBJECTINSTANCEW *instance );
     HRESULT (*get_effect_info)( IDirectInputDevice8W *iface, DIEFFECTINFOW *info, const GUID *guid );
+    HRESULT (*create_effect)( IDirectInputDevice8W *iface, IDirectInputEffect **out );
 };
 
 #define DEVICE_STATE_MAX_SIZE 1024
diff --git a/dlls/dinput/joystick_hid.c b/dlls/dinput/joystick_hid.c
index 2788f138216..c7e9700ed7c 100644
--- a/dlls/dinput/joystick_hid.c
+++ b/dlls/dinput/joystick_hid.c
@@ -803,40 +803,7 @@ static HRESULT hid_joystick_internal_unacquire( IDirectInputDevice8W *iface )
     return DI_OK;
 }
 
-static HRESULT hid_joystick_effect_create( struct hid_joystick *joystick, IDirectInputEffect **out );
-
-static HRESULT WINAPI hid_joystick_CreateEffect( IDirectInputDevice8W *iface, const GUID *guid,
-                                                 const DIEFFECT *params, IDirectInputEffect **out,
-                                                 IUnknown *outer )
-{
-    struct hid_joystick *impl = impl_from_IDirectInputDevice8W( iface );
-    DWORD flags = DIEP_ALLPARAMS;
-    HRESULT hr;
-
-    TRACE( "iface %p, guid %s, params %p, out %p, outer %p\n", iface, debugstr_guid( guid ),
-           params, out, outer );
-
-    if (!out) return E_POINTER;
-    *out = NULL;
-
-    if (!(impl->base.caps.dwFlags & DIDC_FORCEFEEDBACK)) return DIERR_UNSUPPORTED;
-    if (FAILED(hr = hid_joystick_effect_create( impl, out ))) return hr;
-
-    hr = IDirectInputEffect_Initialize( *out, DINPUT_instance, impl->base.dinput->dwVersion, guid );
-    if (FAILED(hr)) goto failed;
-
-    if (!params) return DI_OK;
-    if (!impl->base.acquired || !(impl->base.dwCoopLevel & DISCL_EXCLUSIVE))
-        flags |= DIEP_NODOWNLOAD;
-    hr = IDirectInputEffect_SetParameters( *out, params, flags );
-    if (FAILED(hr)) goto failed;
-    return hr;
-
-failed:
-    IDirectInputEffect_Release( *out );
-    *out = NULL;
-    return hr;
-}
+static HRESULT hid_joystick_internal_create_effect( IDirectInputDevice8W *iface, IDirectInputEffect **out );
 
 static HRESULT hid_joystick_internal_get_effect_info( IDirectInputDevice8W *iface, DIEFFECTINFOW *info,
                                                       const GUID *guid )
@@ -1068,7 +1035,7 @@ static const IDirectInputDevice8WVtbl hid_joystick_vtbl =
     IDirectInputDevice2WImpl_RunControlPanel,
     IDirectInputDevice2WImpl_Initialize,
     /*** IDirectInputDevice2 methods ***/
-    hid_joystick_CreateEffect,
+    IDirectInputDevice2WImpl_CreateEffect,
     IDirectInputDevice2WImpl_EnumEffects,
     IDirectInputDevice2WImpl_GetEffectInfo,
     IDirectInputDevice2WImpl_GetForceFeedbackState,
@@ -1312,6 +1279,7 @@ static const struct dinput_device_vtbl hid_joystick_internal_vtbl =
     hid_joystick_internal_get_property,
     hid_joystick_internal_set_property,
     hid_joystick_internal_get_effect_info,
+    hid_joystick_internal_create_effect,
 };
 
 static DWORD device_type_for_version( DWORD type, DWORD version )
@@ -2826,8 +2794,9 @@ static IDirectInputEffectVtbl hid_joystick_effect_vtbl =
     hid_joystick_effect_Escape,
 };
 
-static HRESULT hid_joystick_effect_create( struct hid_joystick *joystick, IDirectInputEffect **out )
+static HRESULT hid_joystick_internal_create_effect( IDirectInputDevice8W *iface, IDirectInputEffect **out )
 {
+    struct hid_joystick *joystick = impl_from_IDirectInputDevice8W( iface );
     struct hid_joystick_effect *impl;
     ULONG report_len;
 
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index 1127ec2aaea..8e1b752f016 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -339,6 +339,7 @@ static const struct dinput_device_vtbl keyboard_internal_vtbl =
     keyboard_internal_get_property,
     keyboard_internal_set_property,
     NULL,
+    NULL,
 };
 
 static const IDirectInputDevice8WVtbl SysKeyboardWvt =
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index 69348ad2c7f..ec3282b267f 100644
--- a/dlls/dinput/mouse.c
+++ b/dlls/dinput/mouse.c
@@ -652,6 +652,7 @@ static const struct dinput_device_vtbl mouse_internal_vtbl =
     mouse_internal_get_property,
     mouse_internal_set_property,
     NULL,
+    NULL,
 };
 
 static const IDirectInputDevice8WVtbl SysMouseWvt =




More information about the wine-cvs mailing list