[1/2] d3drm: Partial implementation for [Add/Delete]Child

André Hentschel nerv at dawncrow.de
Fri Jan 6 12:54:42 CST 2012


---
 dlls/d3drm/frame.c |   44 ++++++++++++++++++++++++++++++++++----------
 1 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c
index 212f7dd..0f3c113 100644
--- a/dlls/d3drm/frame.c
+++ b/dlls/d3drm/frame.c
@@ -24,6 +24,7 @@
 
 #include "winbase.h"
 #include "wingdi.h"
+#include "wine/list.h"
 
 #include "d3drm_private.h"
 
@@ -33,6 +34,8 @@ typedef struct {
     IDirect3DRMFrame2 IDirect3DRMFrame2_iface;
     IDirect3DRMFrame3 IDirect3DRMFrame3_iface;
     LONG ref;
+    struct list entry;
+    struct list child_list;
 } IDirect3DRMFrameImpl;
 
 static const struct IDirect3DRMFrame2Vtbl Direct3DRMFrame2_Vtbl;
@@ -64,6 +67,7 @@ HRESULT Direct3DRMFrame_create(REFIID riid, IUnknown** ppObj)
     object->IDirect3DRMFrame2_iface.lpVtbl = &Direct3DRMFrame2_Vtbl;
     object->IDirect3DRMFrame3_iface.lpVtbl = &Direct3DRMFrame3_Vtbl;
     object->ref = 1;
+    list_init(&object->child_list);
 
     if (IsEqualGUID(riid, &IID_IDirect3DRMFrame3))
         *ppObj = (IUnknown*)&object->IDirect3DRMFrame3_iface;
@@ -212,10 +216,15 @@ static HRESULT WINAPI IDirect3DRMFrame2Impl_AddChild(IDirect3DRMFrame2* iface,
                                                      LPDIRECT3DRMFRAME child)
 {
     IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
+    IDirect3DRMFrameImpl *Frame = impl_from_IDirect3DRMFrame2((LPDIRECT3DRMFRAME2)child);
 
-    FIXME("(%p/%p)->(%p): stub\n", iface, This, child);
+    FIXME("(%p/%p)->(%p): partial stub\n", iface, This, child);
 
-    return E_NOTIMPL;
+    /* Add the frame in the 'linked' chain */
+    list_add_head(&This->child_list, &Frame->entry);
+    IDirect3DRMFrame_AddRef(child);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IDirect3DRMFrame2Impl_AddLight(IDirect3DRMFrame2* iface,
@@ -488,13 +497,18 @@ static HRESULT WINAPI IDirect3DRMFrame2Impl_Move(IDirect3DRMFrame2* iface, D3DVA
 }
 
 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteChild(IDirect3DRMFrame2* iface,
-                                                        LPDIRECT3DRMFRAME frame)
+                                                        LPDIRECT3DRMFRAME child)
 {
     IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface);
+    IDirect3DRMFrameImpl *Frame = impl_from_IDirect3DRMFrame2((LPDIRECT3DRMFRAME2)child);
 
-    FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
+    FIXME("(%p/%p)->(%p): partial stub\n", iface, This, child);
 
-    return E_NOTIMPL;
+    /* Remove the frame from the 'linked' chain */
+    list_remove(&Frame->entry);
+    IDirect3DRMFrame_Release(child);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteLight(IDirect3DRMFrame2* iface,
@@ -1073,10 +1087,15 @@ static HRESULT WINAPI IDirect3DRMFrame3Impl_AddChild(IDirect3DRMFrame3* iface,
                                                      LPDIRECT3DRMFRAME3 child)
 {
     IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
+    IDirect3DRMFrameImpl *Frame = impl_from_IDirect3DRMFrame3(child);
 
-    FIXME("(%p/%p)->(%p): stub\n", iface, This, child);
+    FIXME("(%p/%p)->(%p): partial stub\n", iface, This, child);
 
-    return E_NOTIMPL;
+    /* Add the frame in the 'linked' chain */
+    list_add_head(&This->child_list, &Frame->entry);
+    IDirect3DRMFrame_AddRef(child);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IDirect3DRMFrame3Impl_AddLight(IDirect3DRMFrame3* iface,
@@ -1340,13 +1359,18 @@ static HRESULT WINAPI IDirect3DRMFrame3Impl_Move(IDirect3DRMFrame3* iface, D3DVA
 }
 
 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteChild(IDirect3DRMFrame3* iface,
-                                                        LPDIRECT3DRMFRAME3 frame)
+                                                        LPDIRECT3DRMFRAME3 child)
 {
     IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface);
+    IDirect3DRMFrameImpl *Frame = impl_from_IDirect3DRMFrame3(child);
 
-    FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
+    FIXME("(%p/%p)->(%p): partial stub\n", iface, This, child);
 
-    return E_NOTIMPL;
+    /* Remove the frame from the 'linked' chain */
+    list_remove(&Frame->entry);
+    IDirect3DRMFrame_Release(child);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteLight(IDirect3DRMFrame3* iface,
-- 

Best Regards, André Hentschel
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Nachrichtenteil als Anhang
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20120106/faa22377/attachment.ksh>


More information about the wine-patches mailing list