Rémi Bernon : dinput: Move user data format to struct dinput_device.

Alexandre Julliard julliard at winehq.org
Thu Oct 28 16:07:44 CDT 2021


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

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Thu Oct 28 10:12:32 2021 +0200

dinput: Move user data format to struct dinput_device.

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

---

 dlls/dinput/device.c         | 45 ++++++++++++++++++++++----------------------
 dlls/dinput/device_private.h |  2 +-
 dlls/dinput/mouse.c          |  6 +++---
 3 files changed, 26 insertions(+), 27 deletions(-)

diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
index 5b96002ea4a..52a6e14ab8d 100644
--- a/dlls/dinput/device.c
+++ b/dlls/dinput/device.c
@@ -400,16 +400,14 @@ static void fill_DataFormat( void *out, DWORD size, const void *in, const DataFo
     }
 }
 
-static void release_DataFormat( DataFormat *format )
+static void dinput_device_release_user_format( struct dinput_device *impl )
 {
-    TRACE("Deleting DataFormat: %p\n", format);
-
-    free( format->dt );
-    format->dt = NULL;
-    free( format->offsets );
-    format->offsets = NULL;
-    free( format->user_df );
-    format->user_df = NULL;
+    free( impl->data_format.dt );
+    impl->data_format.dt = NULL;
+    free( impl->data_format.offsets );
+    impl->data_format.offsets = NULL;
+    free( impl->user_format );
+    impl->user_format = NULL;
 }
 
 static inline LPDIOBJECTDATAFORMAT dataformat_to_odf(LPCDIDATAFORMAT df, int idx)
@@ -441,8 +439,9 @@ LPDIOBJECTDATAFORMAT dataformat_to_odf_by_type(LPCDIDATAFORMAT df, int n, DWORD
     return NULL;
 }
 
-static HRESULT create_DataFormat(LPCDIDATAFORMAT asked_format, DataFormat *format)
+static HRESULT dinput_device_init_user_format( struct dinput_device *impl, const DIDATAFORMAT *asked_format )
 {
+    DataFormat *format = &impl->data_format;
     DataTransform *dt;
     unsigned int i, j;
     int same = 1;
@@ -456,8 +455,8 @@ static HRESULT create_DataFormat(LPCDIDATAFORMAT asked_format, DataFormat *forma
     if (!dt || !done) goto failed;
 
     if (!(format->offsets = malloc( format->wine_df->dwNumObjs * sizeof(int) ))) goto failed;
-    if (!(format->user_df = malloc( asked_format->dwSize ))) goto failed;
-    memcpy(format->user_df, asked_format, asked_format->dwSize);
+    if (!(impl->user_format = malloc( asked_format->dwSize ))) goto failed;
+    memcpy( impl->user_format, asked_format, asked_format->dwSize );
 
     TRACE("Creating DataTransform :\n");
     
@@ -575,8 +574,8 @@ failed:
     format->dt = NULL;
     free( format->offsets );
     format->offsets = NULL;
-    free( format->user_df );
-    format->user_df = NULL;
+    free( impl->user_format );
+    impl->user_format = NULL;
 
     return DIERR_OUTOFMEMORY;
 }
@@ -863,7 +862,7 @@ static HRESULT WINAPI dinput_device_Acquire( IDirectInputDevice8W *iface )
     EnterCriticalSection( &impl->crit );
     if (impl->acquired)
         hr = DI_NOEFFECT;
-    else if (!impl->data_format.user_df)
+    else if (!impl->user_format)
         hr = DIERR_INVALIDPARAM;
     else if ((impl->dwCoopLevel & DISCL_FOREGROUND) && impl->win != GetForegroundWindow())
         hr = DIERR_OTHERAPPHASPRIO;
@@ -934,8 +933,8 @@ static HRESULT WINAPI dinput_device_SetDataFormat( IDirectInputDevice8W *iface,
     This->action_map = NULL;
     This->num_actions = 0;
 
-    release_DataFormat(&This->data_format);
-    res = create_DataFormat( format, &This->data_format );
+    dinput_device_release_user_format( This );
+    res = dinput_device_init_user_format( This, format );
 
     LeaveCriticalSection(&This->crit);
     return res;
@@ -1036,7 +1035,7 @@ void dinput_device_destroy( IDirectInputDevice8W *iface )
     /* Free data format */
     free( This->data_format.wine_df->rgodf );
     free( This->data_format.wine_df );
-    release_DataFormat(&This->data_format);
+    dinput_device_release_user_format( This );
 
     /* Free action mapping */
     free( This->action_map );
@@ -1387,11 +1386,11 @@ static HRESULT WINAPI dinput_device_SetProperty( IDirectInputDevice8W *iface, co
         TRACE( "Axis mode: %s\n", value->dwData == DIPROPAXISMODE_ABS ? "absolute" : "relative" );
         EnterCriticalSection( &impl->crit );
         if (impl->acquired) hr = DIERR_ACQUIRED;
-        else if (!impl->data_format.user_df) hr = DI_OK;
+        else if (!impl->user_format) hr = DI_OK;
         else
         {
-            impl->data_format.user_df->dwFlags &= ~DIDFT_AXIS;
-            impl->data_format.user_df->dwFlags |= value->dwData == DIPROPAXISMODE_ABS ? DIDF_ABSAXIS : DIDF_RELAXIS;
+            impl->user_format->dwFlags &= ~DIDFT_AXIS;
+            impl->user_format->dwFlags |= value->dwData == DIPROPAXISMODE_ABS ? DIDF_ABSAXIS : DIDF_RELAXIS;
             hr = DI_OK;
         }
         LeaveCriticalSection( &impl->crit );
@@ -1531,12 +1530,12 @@ static HRESULT WINAPI dinput_device_GetDeviceState( IDirectInputDevice8W *iface,
     EnterCriticalSection( &impl->crit );
     if (!impl->acquired)
         hr = DIERR_NOTACQUIRED;
-    else if (size != impl->data_format.user_df->dwDataSize)
+    else if (size != impl->user_format->dwDataSize)
         hr = DIERR_INVALIDPARAM;
     else
     {
         fill_DataFormat( data, size, impl->device_state, &impl->data_format );
-        if (!(impl->data_format.user_df->dwFlags & DIDF_ABSAXIS))
+        if (!(impl->user_format->dwFlags & DIDF_ABSAXIS))
             impl->vtbl->enum_objects( iface, &filter, DIDFT_RELAXIS, reset_axis_data, impl->device_state );
         hr = DI_OK;
     }
diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h
index 7ee0ef312c0..4420f59cc6d 100644
--- a/dlls/dinput/device_private.h
+++ b/dlls/dinput/device_private.h
@@ -44,7 +44,6 @@ typedef struct
 
     int                        *offsets;     /* object offsets */
     LPDIDATAFORMAT              wine_df;     /* wine internal data format */
-    LPDIDATAFORMAT              user_df;     /* user defined data format */
 } DataFormat;
 
 typedef struct
@@ -103,6 +102,7 @@ struct dinput_device
     DWORD                       buffersize;  /* size of the queue - set in 'SetProperty'    */
 
     DataFormat                  data_format; /* user data format and wine to user format converter */
+    DIDATAFORMAT *user_format;
 
     /* Action mapping */
     int                         num_actions; /* number of actions mapped */
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index 4e1762fbc50..628011c13e1 100644
--- a/dlls/dinput/mouse.c
+++ b/dlls/dinput/mouse.c
@@ -189,7 +189,7 @@ void dinput_mouse_rawinput_hook( IDirectInputDevice8W *iface, WPARAM wparam, LPA
     state->lX += rel.x;
     state->lY += rel.y;
 
-    if (impl->base.data_format.user_df->dwFlags & DIDF_ABSAXIS)
+    if (impl->base.user_format->dwFlags & DIDF_ABSAXIS)
     {
         pt.x = state->lX;
         pt.y = state->lY;
@@ -269,7 +269,7 @@ int dinput_mouse_hook( IDirectInputDevice8W *iface, WPARAM wparam, LPARAM lparam
             state->lX += pt.x = hook->pt.x - pt.x;
             state->lY += pt.y = hook->pt.y - pt.y;
 
-            if (impl->base.data_format.user_df->dwFlags & DIDF_ABSAXIS)
+            if (impl->base.user_format->dwFlags & DIDF_ABSAXIS)
             {
                 pt1.x = state->lX;
                 pt1.y = state->lY;
@@ -409,7 +409,7 @@ static HRESULT mouse_acquire( IDirectInputDevice8W *iface )
 
     /* Init the mouse state */
     GetCursorPos( &point );
-    if (impl->base.data_format.user_df->dwFlags & DIDF_ABSAXIS)
+    if (impl->base.user_format->dwFlags & DIDF_ABSAXIS)
     {
         state->lX = point.x;
         state->lY = point.y;




More information about the wine-cvs mailing list