=?UTF-8?Q?Ri=C4=8Dardas=20Barkauskas=20?=: ddraw: COM cleanup for IDirect3DViewport3 interface.

Alexandre Julliard julliard at winehq.org
Tue Oct 4 17:43:04 CDT 2011


Module: wine
Branch: master
Commit: 6253d319cbd889cc38fc144304dedfff800f0a5d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6253d319cbd889cc38fc144304dedfff800f0a5d

Author: Ričardas Barkauskas <miegalius at gmail.com>
Date:   Mon Oct  3 17:14:51 2011 -0500

ddraw: COM cleanup for IDirect3DViewport3 interface.

---

 dlls/ddraw/ddraw.c         |    2 +-
 dlls/ddraw/ddraw_private.h |    2 +-
 dlls/ddraw/device.c        |   26 +++++++++++++++-----------
 dlls/ddraw/viewport.c      |    6 +++---
 4 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 140ee88..d4bdf28 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4150,7 +4150,7 @@ static HRESULT WINAPI d3d3_CreateViewport(IDirect3D3 *iface, IDirect3DViewport3
     d3d_viewport_init(object, This);
 
     TRACE("Created viewport %p.\n", object);
-    *viewport = (IDirect3DViewport3 *)object;
+    *viewport = &object->IDirect3DViewport3_iface;
 
     return D3D_OK;
 }
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index a2f0007..a8f384f 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -442,7 +442,7 @@ IDirect3DMaterialImpl *d3d_material_create(IDirectDrawImpl *ddraw) DECLSPEC_HIDD
  *****************************************************************************/
 struct IDirect3DViewportImpl
 {
-    const IDirect3DViewport3Vtbl *lpVtbl;
+    IDirect3DViewport3 IDirect3DViewport3_iface;
     LONG ref;
 
     /* IDirect3DViewport fields */
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index eb43aa3..4ca94f6 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -775,7 +775,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_AddViewport(IDirect3DDevice2 *iface,
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
 
-    return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, &vp->IDirect3DViewport3_iface);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_1_AddViewport(IDirect3DDevice *iface,
@@ -786,7 +786,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_AddViewport(IDirect3DDevice *iface,
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport);
 
-    return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, &vp->IDirect3DViewport3_iface);
 }
 
 /*****************************************************************************
@@ -836,7 +836,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_DeleteViewport(IDirect3DDevice2 *ifa
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
 
-    return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, &vp->IDirect3DViewport3_iface);
 }
 
 static HRESULT WINAPI IDirect3DDeviceImpl_1_DeleteViewport(IDirect3DDevice *iface,
@@ -847,7 +847,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_DeleteViewport(IDirect3DDevice *ifac
 
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport);
 
-    return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp);
+    return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, &vp->IDirect3DViewport3_iface);
 }
 
 /*****************************************************************************
@@ -876,6 +876,7 @@ IDirect3DDeviceImpl_3_NextViewport(IDirect3DDevice3 *iface,
 {
     IDirect3DDeviceImpl *This = device_from_device3(iface);
     IDirect3DViewportImpl *vp = unsafe_impl_from_IDirect3DViewport3(Viewport3);
+    IDirect3DViewportImpl *next;
     struct list *entry;
 
     TRACE("iface %p, viewport %p, next %p, flags %#x.\n",
@@ -911,7 +912,10 @@ IDirect3DDeviceImpl_3_NextViewport(IDirect3DDevice3 *iface,
     }
 
     if (entry)
-        *lplpDirect3DViewport3 = (IDirect3DViewport3 *)LIST_ENTRY(entry, IDirect3DViewportImpl, entry);
+    {
+        next = LIST_ENTRY(entry, IDirect3DViewportImpl, entry);
+        *lplpDirect3DViewport3 = &next->IDirect3DViewport3_iface;
+    }
     else
         *lplpDirect3DViewport3 = NULL;
 
@@ -931,7 +935,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_NextViewport(IDirect3DDevice2 *iface
             iface, Viewport2, lplpDirect3DViewport2, Flags);
 
     hr = IDirect3DDevice3_NextViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
-            (IDirect3DViewport3 *)vp, &res, Flags);
+            &vp->IDirect3DViewport3_iface, &res, Flags);
     *lplpDirect3DViewport2 = (IDirect3DViewport2 *)res;
     return hr;
 }
@@ -948,7 +952,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_1_NextViewport(IDirect3DDevice *iface,
             iface, Viewport, lplpDirect3DViewport, Flags);
 
     hr = IDirect3DDevice3_NextViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
-            (IDirect3DViewport3 *)vp, &res, Flags);
+            &vp->IDirect3DViewport3_iface, &res, Flags);
     *lplpDirect3DViewport = (IDirect3DViewport *)res;
     return hr;
 }
@@ -1726,8 +1730,8 @@ IDirect3DDeviceImpl_3_SetCurrentViewport(IDirect3DDevice3 *iface,
     if (This->current_viewport)
     {
         TRACE("ViewportImpl is at %p, interface is at %p\n", This->current_viewport,
-                (IDirect3DViewport3 *)This->current_viewport);
-        IDirect3DViewport3_Release((IDirect3DViewport3 *)This->current_viewport);
+                &This->current_viewport->IDirect3DViewport3_iface);
+        IDirect3DViewport3_Release(&This->current_viewport->IDirect3DViewport3_iface);
     }
     IDirect3DViewport3_AddRef(Direct3DViewport3);
 
@@ -1750,7 +1754,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_2_SetCurrentViewport(IDirect3DDevice2
     TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2);
 
     return IDirect3DDevice3_SetCurrentViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl,
-            (IDirect3DViewport3 *)vp);
+            &vp->IDirect3DViewport3_iface);
 }
 
 /*****************************************************************************
@@ -1780,7 +1784,7 @@ IDirect3DDeviceImpl_3_GetCurrentViewport(IDirect3DDevice3 *iface,
         return DDERR_INVALIDPARAMS;
 
     EnterCriticalSection(&ddraw_cs);
-    *Direct3DViewport3 = (IDirect3DViewport3 *)This->current_viewport;
+    *Direct3DViewport3 = &This->current_viewport->IDirect3DViewport3_iface;
 
     /* AddRef the returned viewport */
     if(*Direct3DViewport3) IDirect3DViewport3_AddRef(*Direct3DViewport3);
diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c
index 910fcab..6024aae 100644
--- a/dlls/ddraw/viewport.c
+++ b/dlls/ddraw/viewport.c
@@ -111,7 +111,7 @@ static void _dump_D3DVIEWPORT2(const D3DVIEWPORT2 *lpvp)
 
 static inline IDirect3DViewportImpl *impl_from_IDirect3DViewport3(IDirect3DViewport3 *iface)
 {
-    return CONTAINING_RECORD(iface, IDirect3DViewportImpl, lpVtbl);
+    return CONTAINING_RECORD(iface, IDirect3DViewportImpl, IDirect3DViewport3_iface);
 }
 
 /*****************************************************************************
@@ -1124,12 +1124,12 @@ IDirect3DViewportImpl *unsafe_impl_from_IDirect3DViewport3(IDirect3DViewport3 *i
 {
     if (!iface) return NULL;
     assert(iface->lpVtbl == &d3d_viewport_vtbl);
-    return CONTAINING_RECORD(iface, IDirect3DViewportImpl, lpVtbl);
+    return CONTAINING_RECORD(iface, IDirect3DViewportImpl, IDirect3DViewport3_iface);
 }
 
 void d3d_viewport_init(IDirect3DViewportImpl *viewport, IDirectDrawImpl *ddraw)
 {
-    viewport->lpVtbl = &d3d_viewport_vtbl;
+    viewport->IDirect3DViewport3_iface.lpVtbl = &d3d_viewport_vtbl;
     viewport->ref = 1;
     viewport->ddraw = ddraw;
     viewport->use_vp2 = 0xff;




More information about the wine-cvs mailing list