Vitaliy Margolen : dinput: Use dinput device as a base class for
keyboard, mouse and joystick.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Oct 17 06:12:30 CDT 2006
Module: wine
Branch: master
Commit: 7d838d9e6f3e45c9335526c764681b9ce01ba387
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d838d9e6f3e45c9335526c764681b9ce01ba387
Author: Vitaliy Margolen <wine-patch at kievinfo.com>
Date: Sun Oct 15 11:29:30 2006 -0600
dinput: Use dinput device as a base class for keyboard, mouse and joystick.
---
dlls/dinput/device_private.h | 6 +++---
dlls/dinput/joystick_linux.c | 13 ++++++-------
dlls/dinput/joystick_linuxinput.c | 13 ++++++-------
dlls/dinput/keyboard.c | 12 +++++-------
dlls/dinput/mouse.c | 12 +++++-------
5 files changed, 25 insertions(+), 31 deletions(-)
diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h
index a2777c2..b5c88bf 100644
--- a/dlls/dinput/device_private.h
+++ b/dlls/dinput/device_private.h
@@ -30,9 +30,9 @@ #include "dinput.h"
typedef struct IDirectInputDevice2AImpl IDirectInputDevice2AImpl;
struct IDirectInputDevice2AImpl
{
- const IDirectInputDevice2AVtbl *lpVtbl;
- LONG ref;
- GUID guid;
+ const void *lpVtbl;
+ LONG ref;
+ GUID guid;
};
/* Routines to do DataFormat / WineFormat conversions */
diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c
index 62a59c1..885d91f 100644
--- a/dlls/dinput/joystick_linux.c
+++ b/dlls/dinput/joystick_linux.c
@@ -89,9 +89,8 @@ static const IDirectInputDevice8AVtbl Jo
static const IDirectInputDevice8WVtbl JoystickWvt;
struct JoystickImpl
{
- const void *lpVtbl;
- LONG ref;
- GUID guid;
+ struct IDirectInputDevice2AImpl base;
+
char dev[32];
/* The 'parent' DInput */
@@ -495,12 +494,12 @@ #ifdef JSIOCGBUTTONS
}
#endif
- newDevice->lpVtbl = jvt;
- newDevice->ref = 1;
+ newDevice->base.lpVtbl = jvt;
+ newDevice->base.ref = 1;
newDevice->dinput = dinput;
newDevice->acquired = FALSE;
newDevice->overflow = FALSE;
- CopyMemory(&(newDevice->guid),rguid,sizeof(*rguid));
+ CopyMemory(&newDevice->base.guid, rguid, sizeof(*rguid));
/* setup_dinput_options may change these */
newDevice->deadzone = 5000;
@@ -672,7 +671,7 @@ static ULONG WINAPI JoystickAImpl_Releas
JoystickImpl *This = (JoystickImpl *)iface;
ULONG ref;
- ref = InterlockedDecrement((&This->ref));
+ ref = InterlockedDecrement(&This->base.ref);
if (ref)
return ref;
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index ef8af3d..335dc89 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -118,9 +118,8 @@ #define AXE_ABSFLAT 4
struct JoystickImpl
{
- const void *lpVtbl;
- LONG ref;
- GUID guid;
+ struct IDirectInputDevice2AImpl base;
+
struct JoyDev *joydev;
/* The 'parent' DInput */
@@ -373,15 +372,15 @@ static JoystickImpl *alloc_device(REFGUI
return NULL;
}
- newDevice->lpVtbl = jvt;
- newDevice->ref = 1;
+ newDevice->base.lpVtbl = jvt;
+ newDevice->base.ref = 1;
+ memcpy(&newDevice->base.guid, rguid, sizeof(*rguid));
newDevice->joyfd = -1;
newDevice->dinput = dinput;
newDevice->joydev = joydev;
#ifdef HAVE_STRUCT_FF_EFFECT_DIRECTION
newDevice->ff_state = FF_STATUS_STOPPED;
#endif
- memcpy(&(newDevice->guid),rguid,sizeof(*rguid));
for (i=0;i<ABS_MAX;i++) {
/* apps expect the range to be the same they would get from the
* GetProperty/range method */
@@ -522,7 +521,7 @@ static ULONG WINAPI JoystickAImpl_Releas
JoystickImpl *This = (JoystickImpl *)iface;
ULONG ref;
- ref = InterlockedDecrement(&(This->ref));
+ ref = InterlockedDecrement(&This->base.ref);
if (ref)
return ref;
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index 8cff814..8dcf063 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -46,9 +46,7 @@ static const IDirectInputDevice8WVtbl Sy
typedef struct SysKeyboardImpl SysKeyboardImpl;
struct SysKeyboardImpl
{
- const void *lpVtbl;
- LONG ref;
- GUID guid;
+ struct IDirectInputDevice2AImpl base;
IDirectInputImpl* dinput;
@@ -204,9 +202,9 @@ static SysKeyboardImpl *alloc_device(REF
SysKeyboardImpl* newDevice;
newDevice = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysKeyboardImpl));
- newDevice->lpVtbl = kvt;
- newDevice->ref = 1;
- memcpy(&(newDevice->guid),rguid,sizeof(*rguid));
+ newDevice->base.lpVtbl = kvt;
+ newDevice->base.ref = 1;
+ memcpy(&newDevice->base.guid, rguid, sizeof(*rguid));
newDevice->dinput = dinput;
InitializeCriticalSection(&(newDevice->crit));
@@ -263,7 +261,7 @@ static ULONG WINAPI SysKeyboardAImpl_Rel
SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
ULONG ref;
- ref = InterlockedDecrement(&(This->ref));
+ ref = InterlockedDecrement(&This->base.ref);
if (ref) return ref;
set_dinput_hook(WH_KEYBOARD_LL, NULL);
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index b426af1..894dcb2 100644
--- a/dlls/dinput/mouse.c
+++ b/dlls/dinput/mouse.c
@@ -108,9 +108,7 @@ typedef enum {
struct SysMouseImpl
{
- const void *lpVtbl;
- LONG ref;
- GUID guid;
+ struct IDirectInputDevice2AImpl base;
IDirectInputImpl *dinput;
@@ -251,10 +249,10 @@ static SysMouseImpl *alloc_device(REFGUI
};
SysMouseImpl* newDevice;
newDevice = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysMouseImpl));
- newDevice->ref = 1;
- newDevice->lpVtbl = mvt;
+ newDevice->base.lpVtbl = mvt;
+ newDevice->base.ref = 1;
+ memcpy(&newDevice->base.guid, rguid, sizeof(*rguid));
InitializeCriticalSection(&(newDevice->crit));
- memcpy(&(newDevice->guid),rguid,sizeof(*rguid));
/* Per default, Wine uses its internal data format */
newDevice->df = (DIDATAFORMAT *) &Wine_InternalMouseFormat;
@@ -327,7 +325,7 @@ static ULONG WINAPI SysMouseAImpl_Releas
SysMouseImpl *This = (SysMouseImpl *)iface;
ULONG ref;
- ref = InterlockedDecrement(&(This->ref));
+ ref = InterlockedDecrement(&This->base.ref);
if (ref)
return ref;
More information about the wine-cvs
mailing list