[PATCH 2/2] ddraw: Use unsafe_impl_from_IDirectDrawClipper for an app provided iface.

Michael Stefaniuc mstefani at redhat.de
Mon Jun 20 04:22:55 CDT 2011


---
 dlls/ddraw/clipper.c       |    9 +++++++++
 dlls/ddraw/ddraw_private.h |    1 +
 dlls/ddraw/surface.c       |   18 ++++++++++--------
 3 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/dlls/ddraw/clipper.c b/dlls/ddraw/clipper.c
index b6e66f4..a8fd248 100644
--- a/dlls/ddraw/clipper.c
+++ b/dlls/ddraw/clipper.c
@@ -308,3 +308,12 @@ HRESULT ddraw_clipper_init(IDirectDrawClipperImpl *clipper)
 
     return DD_OK;
 }
+
+IDirectDrawClipperImpl *unsafe_impl_from_IDirectDrawClipper(IDirectDrawClipper *iface)
+{
+    if (!iface)
+        return NULL;
+    assert(iface->lpVtbl == &ddraw_clipper_vtbl);
+
+    return impl_from_IDirectDrawClipper(iface);
+}
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 1f59433..065f290 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -366,6 +366,7 @@ struct IDirectDrawClipperImpl
 };
 
 HRESULT ddraw_clipper_init(IDirectDrawClipperImpl *clipper) DECLSPEC_HIDDEN;
+IDirectDrawClipperImpl *unsafe_impl_from_IDirectDrawClipper(IDirectDrawClipper *iface) DECLSPEC_HIDDEN;
 
 /*****************************************************************************
  * IDirectDrawPalette implementation structure
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index c0e7b25..1964df4 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -3624,26 +3624,28 @@ static HRESULT WINAPI ddraw_surface1_GetClipper(IDirectDrawSurface *iface, IDire
  *  DD_OK on success
  *
  *****************************************************************************/
-static HRESULT WINAPI ddraw_surface7_SetClipper(IDirectDrawSurface7 *iface, IDirectDrawClipper *Clipper)
+static HRESULT WINAPI ddraw_surface7_SetClipper(IDirectDrawSurface7 *iface,
+        IDirectDrawClipper *iclipper)
 {
     IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface7(iface);
+    IDirectDrawClipperImpl *clipper = unsafe_impl_from_IDirectDrawClipper(iclipper);
     IDirectDrawClipperImpl *oldClipper = This->clipper;
     HWND clipWindow;
     HRESULT hr;
 
-    TRACE("iface %p, clipper %p.\n", iface, Clipper);
+    TRACE("iface %p, clipper %p.\n", iface, iclipper);
 
     EnterCriticalSection(&ddraw_cs);
-    if ((IDirectDrawClipperImpl *)Clipper == This->clipper)
+    if (clipper == This->clipper)
     {
         LeaveCriticalSection(&ddraw_cs);
         return DD_OK;
     }
 
-    This->clipper = (IDirectDrawClipperImpl *)Clipper;
+    This->clipper = clipper;
 
-    if (Clipper != NULL)
-        IDirectDrawClipper_AddRef(Clipper);
+    if (clipper != NULL)
+        IDirectDrawClipper_AddRef(iclipper);
     if(oldClipper)
         IDirectDrawClipper_Release(&oldClipper->IDirectDrawClipper_iface);
 
@@ -3653,8 +3655,8 @@ static HRESULT WINAPI ddraw_surface7_SetClipper(IDirectDrawSurface7 *iface, IDir
     if (This->wined3d_swapchain)
     {
         clipWindow = NULL;
-        if(Clipper) {
-            IDirectDrawClipper_GetHWnd(Clipper, &clipWindow);
+        if(clipper) {
+            IDirectDrawClipper_GetHWnd(iclipper, &clipWindow);
         }
 
         if (clipWindow)
-- 
1.7.4.4



More information about the wine-patches mailing list