From 154c1658d35d209910aba5437759d032fe49d9b8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Hentschel?= Date: Mon, 30 Apr 2012 17:10:48 +0200 Subject: [PATCH] d3drm: Implement IDirect3DRMFrameX_DeleteVisual. --- 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 2e980598efb..7f2497d78dc 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) -- 2.11.4.GIT