dinput: COM cleanup - use interface instead of lpvtbl in joystick effects.
authorVitaliy Margolen <wine-patches@kievinfo.com>
Mon, 3 Jan 2011 14:24:34 +0000 (07:24 -0700)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 3 Jan 2011 15:46:25 +0000 (16:46 +0100)
dlls/dinput/effect_linuxinput.c

index 7802271e805d34db2337599ce0dc267c5b640f6f..e35a96f9858137c139a5097a6430178a52ef2e17 100644 (file)
@@ -49,9 +49,9 @@ static const IDirectInputEffectVtbl LinuxInputEffectVtbl;
 typedef struct LinuxInputEffectImpl LinuxInputEffectImpl;
 struct LinuxInputEffectImpl
 {
-    const void *lpVtbl;
-    LONG       ref;
-    GUID       guid;
+    IDirectInputEffect  IDirectInputEffect_iface;
+    LONG                ref;
+    GUID                guid;
 
     struct ff_effect    effect; /* Effect data */
     int                 gain;   /* Effect gain */
@@ -60,6 +60,10 @@ struct LinuxInputEffectImpl
     struct list        *entry;  /* Entry into the parent's list of effects */
 };
 
+static inline LinuxInputEffectImpl *impl_from_IDirectInputEffect(IDirectInputEffect *iface)
+{
+    return CONTAINING_RECORD(iface, LinuxInputEffectImpl, IDirectInputEffect_iface);
+}
 
 /******************************************************************************
  *      DirectInputEffect Functional Helper
@@ -244,14 +248,14 @@ static void _dump_DIEFFECT(LPCDIEFFECT eff, REFGUID guid)
 static ULONG WINAPI LinuxInputEffectImpl_AddRef(
        LPDIRECTINPUTEFFECT iface)
 {
-    LinuxInputEffectImpl *This = (LinuxInputEffectImpl *)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
     return InterlockedIncrement(&(This->ref));
 }
 
 static HRESULT WINAPI LinuxInputEffectImpl_Download(
        LPDIRECTINPUTEFFECT iface)
 {
-    LinuxInputEffectImpl *This = (LinuxInputEffectImpl *)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
 
     TRACE("(this=%p)\n", This);
 
@@ -281,7 +285,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_GetEffectGuid(
         LPDIRECTINPUTEFFECT iface,
        LPGUID pguid)
 {
-    LinuxInputEffectImpl *This = (LinuxInputEffectImpl*)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
 
     TRACE("(this=%p,%p)\n", This, pguid);
 
@@ -312,7 +316,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_GetParameters(
        DWORD dwFlags)
 {
     HRESULT diErr = DI_OK;
-    LinuxInputEffectImpl *This = (LinuxInputEffectImpl *)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
     TRACE("(this=%p,%p,%d)\n", This, peff, dwFlags);
 
     /* Major conversion factors are:
@@ -474,7 +478,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_QueryInterface(
        REFIID riid,
        void **ppvObject)
 {
-    LinuxInputEffectImpl* This = (LinuxInputEffectImpl*)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
 
     TRACE("(this=%p,%s,%p)\n", This, debugstr_guid(riid), ppvObject);
 
@@ -495,7 +499,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_Start(
        DWORD dwFlags)
 {
     struct input_event event;
-    LinuxInputEffectImpl* This = (LinuxInputEffectImpl*)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
 
     TRACE("(this=%p,%d,%d)\n", This, dwIterations, dwFlags);
 
@@ -527,8 +531,8 @@ static HRESULT WINAPI LinuxInputEffectImpl_SetParameters(
         LPDIRECTINPUTEFFECT iface,
         LPCDIEFFECT peff,
         DWORD dwFlags)
-{       
-    LinuxInputEffectImpl* This = (LinuxInputEffectImpl*)iface; 
+{
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
     DWORD type = _typeFromGUID(&This->guid);
     HRESULT retval = DI_OK;
 
@@ -727,7 +731,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_Stop(
         LPDIRECTINPUTEFFECT iface)
 {
     struct input_event event;
-    LinuxInputEffectImpl *This = (LinuxInputEffectImpl *)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
 
     TRACE("(this=%p)\n", This);
 
@@ -743,7 +747,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_Stop(
 static HRESULT WINAPI LinuxInputEffectImpl_Unload(
        LPDIRECTINPUTEFFECT iface)
 {
-    LinuxInputEffectImpl *This = (LinuxInputEffectImpl *)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
     TRACE("(this=%p)\n", This);
 
     /* Erase the downloaded effect */
@@ -758,7 +762,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_Unload(
 
 static ULONG WINAPI LinuxInputEffectImpl_Release(LPDIRECTINPUTEFFECT iface)
 {
-    LinuxInputEffectImpl *This = (LinuxInputEffectImpl *)iface;
+    LinuxInputEffectImpl *This = impl_from_IDirectInputEffect(iface);
     ULONG ref = InterlockedDecrement(&(This->ref));
 
     if (ref == 0)
@@ -786,7 +790,7 @@ HRESULT linuxinput_create_effect(
        HEAP_ZERO_MEMORY, sizeof(LinuxInputEffectImpl));
     DWORD type = _typeFromGUID(rguid);
 
-    newEffect->lpVtbl = &LinuxInputEffectVtbl;
+    newEffect->IDirectInputEffect_iface.lpVtbl = &LinuxInputEffectVtbl;
     newEffect->ref = 1;
     newEffect->guid = *rguid;
     newEffect->fd = fd;