Vitaliy Margolen : dinput: COM cleanup - use interface instead of lpvtbl in joystick effects.
Alexandre Julliard
julliard at winehq.org
Mon Jan 3 10:58:05 CST 2011
Module: wine
Branch: master
Commit: 0adc4708548d824ddad1bc3d73d655dfcbad033b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0adc4708548d824ddad1bc3d73d655dfcbad033b
Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date: Mon Jan 3 07:24:34 2011 -0700
dinput: COM cleanup - use interface instead of lpvtbl in joystick effects.
---
dlls/dinput/effect_linuxinput.c | 34 +++++++++++++++++++---------------
1 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/dlls/dinput/effect_linuxinput.c b/dlls/dinput/effect_linuxinput.c
index 7802271..e35a96f 100644
--- a/dlls/dinput/effect_linuxinput.c
+++ b/dlls/dinput/effect_linuxinput.c
@@ -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;
More information about the wine-cvs
mailing list