[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