[2/3] d3drm: Implement IDirect3DRMFrameX_DeleteVisual
André Hentschel
nerv at dawncrow.de
Mon Apr 30 10:10:48 CDT 2012
---
dlls/d3drm/frame.c | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c
index 2e98059..7f2497d 100644
--- a/dlls/d3drm/frame.c
+++ b/dlls/d3drm/frame.c
@@ -522,9 +522,9 @@ static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteVisual(IDirect3DRMFrame2* ifac
{
IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
- FIXME("(%p/%p)->(%p): stub\n", iface, This, vis);
+ TRACE("(%p/%p)->(%p)\n", iface, This, vis);
- return E_NOTIMPL;
+ return IDirect3DRMFrame3_DeleteVisual(&This->IDirect3DRMFrame3_iface, (LPUNKNOWN)vis);
}
static D3DCOLOR WINAPI IDirect3DRMFrame2Impl_GetSceneBackground(IDirect3DRMFrame2* iface)
@@ -1448,10 +1448,26 @@ static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteMoveCallback(IDirect3DRMFrame3
static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteVisual(IDirect3DRMFrame3* iface, LPUNKNOWN vis)
{
IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
+ ULONG i;
+
+ TRACE("(%p/%p)->(%p)\n", iface, This, vis);
- FIXME("(%p/%p)->(%p): stub\n", iface, This, vis);
+ if (!vis)
+ return D3DRMERR_BADOBJECT;
- return E_NOTIMPL;
+ /* Check if visual exists */
+ for (i = 0; i < This->nb_visuals; i++)
+ if (This->visuals[i] == (IDirect3DRMVisual*)vis)
+ break;
+
+ if (i == This->nb_visuals)
+ return D3DRMERR_BADVALUE;
+
+ memmove(This->visuals + i, This->visuals + i + 1, sizeof(IDirect3DRMVisual*) * (This->nb_visuals - 1 - i));
+ IDirect3DRMVisual_Release(vis);
+ This->nb_visuals--;
+
+ return D3DRM_OK;
}
static D3DCOLOR WINAPI IDirect3DRMFrame3Impl_GetSceneBackground(IDirect3DRMFrame3* iface)
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list