Module: wine Branch: master Commit: 9e50efd89f0e072b668287633fdabfc7f2724eb1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9e50efd89f0e072b668287633f...
Author: Michael Stefaniuc mstefani@redhat.de Date: Mon Jun 20 11:22:55 2011 +0200
ddraw: Use unsafe_impl_from_IDirectDrawClipper for an app provided iface.
---
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 9b88037..0ef1f30 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)