Some Clipper Code.
authorMaarten Bosma <maarten@bosma.de>
Thu, 7 Jun 2007 11:49:43 +0000 (11:49 +0000)
committerMaarten Bosma <maarten@bosma.de>
Thu, 7 Jun 2007 11:49:43 +0000 (11:49 +0000)
svn path=/trunk/; revision=27043

reactos/dll/directx/ddraw/Clipper/clipper.h [new file with mode: 0644]
reactos/dll/directx/ddraw/Clipper/clipper_main.c [new file with mode: 0644]
reactos/dll/directx/ddraw/Clipper/clipper_stubs.c
reactos/dll/directx/ddraw/Ddraw/ddraw_stubs.c
reactos/dll/directx/ddraw/Surface/surface_main.c
reactos/dll/directx/ddraw/Surface/surface_stubs.c
reactos/dll/directx/ddraw/ddraw.rbuild
reactos/dll/directx/ddraw/rosdraw.h
reactos/dll/directx/ddraw/startup.c

diff --git a/reactos/dll/directx/ddraw/Clipper/clipper.h b/reactos/dll/directx/ddraw/Clipper/clipper.h
new file mode 100644 (file)
index 0000000..c19f72b
--- /dev/null
@@ -0,0 +1,10 @@
+HRESULT WINAPI DirectDrawClipper_QueryInterface (LPDIRECTDRAWCLIPPER, REFIID,  LPVOID*);
+ULONG WINAPI DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER);
+ULONG WINAPI DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER);
+HRESULT WINAPI DirectDrawClipper_Initialize(LPDIRECTDRAWCLIPPER, LPDIRECTDRAW, DWORD);
+HRESULT WINAPI DirectDrawClipper_SetHwnd( LPDIRECTDRAWCLIPPER, DWORD, HWND);
+HRESULT WINAPI DirectDrawClipper_GetClipList(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA,LPDWORD);
+HRESULT WINAPI DirectDrawClipper_SetClipList(LPDIRECTDRAWCLIPPER,LPRGNDATA,DWORD);
+HRESULT WINAPI DirectDrawClipper_QueryInterface(LPDIRECTDRAWCLIPPER, REFIID, LPVOID*);
+HRESULT WINAPI DirectDrawClipper_GetHWnd(LPDIRECTDRAWCLIPPER, HWND*);
+HRESULT WINAPI DirectDrawClipper_IsClipListChanged(LPDIRECTDRAWCLIPPER, BOOL* lpbChanged);
diff --git a/reactos/dll/directx/ddraw/Clipper/clipper_main.c b/reactos/dll/directx/ddraw/Clipper/clipper_main.c
new file mode 100644 (file)
index 0000000..0779c20
--- /dev/null
@@ -0,0 +1,143 @@
+/* $Id$
+ *
+ * COPYRIGHT:            See COPYING in the top level directory
+ * PROJECT:              ReactOS DirectX
+ * FILE:                 ddraw/clipper/clipper_stubs.c
+ * PURPOSE:              IDirectDrawClipper Implementation 
+ * PROGRAMMER:           Maarten Bosma
+ *
+ */
+
+#include "rosdraw.h"
+
+HRESULT WINAPI
+DirectDrawClipper_QueryInterface (LPDIRECTDRAWCLIPPER iface,
+                                REFIID id,  LPVOID *obj)
+{
+    if(!iface)
+        return DDERR_INVALIDOBJECT;
+
+    return E_NOINTERFACE;
+}
+
+HRESULT WINAPI 
+DirectDrawClipper_Initialize (LPDIRECTDRAWCLIPPER iface, 
+                               LPDIRECTDRAW lpDD,  DWORD dwFlags) 
+{
+    LPDDRAWI_DDRAWCLIPPER_INT This = (LPDDRAWI_DDRAWCLIPPER_INT)iface;
+    LPDDRAWI_DIRECTDRAW_INT DDraw = (LPDDRAWI_DIRECTDRAW_INT)lpDD;
+
+    DX_WINDBG_trace();
+
+    if(!This)
+        return DDERR_INVALIDOBJECT;
+
+    if(This->dwIntRefCnt)
+        return DDERR_ALREADYINITIALIZED;
+
+    This->lpVtbl = (LPVOID)&DirectDrawClipper_Vtable;
+    This->dwIntRefCnt = 1;
+
+    DxHeapMemAlloc(This->lpLcl, sizeof(LPDDRAWI_DDRAWCLIPPER_LCL));
+    //This->lpLcl->lpClipMore
+    This->lpLcl->lpDD_int = DDraw;
+    This->lpLcl->lpGbl->dwRefCnt = 1;
+    This->lpLcl->pAddrefedThisOwner = (IUnknown*)DDraw;
+
+    // FIXME: Implement Linking and share global object
+    DxHeapMemAlloc(This->lpLcl->lpGbl, sizeof(LPDDRAWI_DDRAWCLIPPER_GBL));
+    This->lpLcl->lpGbl->dwProcessId = GetCurrentProcessId();
+
+    return DD_OK;
+}
+
+ULONG WINAPI 
+DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) 
+{
+    LPDDRAWI_DDRAWCLIPPER_INT This = (LPDDRAWI_DDRAWCLIPPER_INT)iface;
+    if(!This)
+        return DDERR_INVALIDOBJECT;
+
+    DX_WINDBG_trace();
+
+    if (iface!=NULL)
+    {
+        This->lpLcl->dwLocalRefCnt--;
+        This->dwIntRefCnt--;
+
+        if (This->lpLcl->lpGbl)
+            This->lpLcl->lpGbl->dwRefCnt--;
+    }
+
+    return This->dwIntRefCnt;
+}
+
+ULONG WINAPI 
+DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
+{
+    LPDDRAWI_DDRAWCLIPPER_INT This = (LPDDRAWI_DDRAWCLIPPER_INT)iface;
+    if(!This)
+        return DDERR_INVALIDOBJECT;
+
+    DX_WINDBG_trace();
+
+    if (iface!=NULL)
+    {
+        This->dwIntRefCnt++;
+        This->lpLcl->dwLocalRefCnt++;
+        if (This->lpLcl->lpGbl)
+            This->lpLcl->lpGbl->dwRefCnt++;
+    }
+    return This->dwIntRefCnt;
+}
+
+HRESULT WINAPI 
+DirectDrawClipper_SetHwnd( LPDIRECTDRAWCLIPPER iface, 
+                           DWORD dwFlags, 
+                           HWND hWnd) 
+{
+    LPDDRAWI_DDRAWCLIPPER_INT This = (LPDDRAWI_DDRAWCLIPPER_INT)iface;
+
+    if(!This)
+        return DDERR_INVALIDOBJECT;
+
+    if(!IsWindow(hWnd))
+        return DDERR_INVALIDPARAMS;
+
+    // TODO: check flags
+
+    This->lpLcl->lpGbl->hWnd = (ULONG_PTR)hWnd;
+    This->lpLcl->lpGbl->dwFlags = dwFlags;
+
+    return DD_OK;
+}
+
+HRESULT WINAPI 
+DirectDrawClipper_GetHWnd( LPDIRECTDRAWCLIPPER iface, 
+                           HWND* hWndPtr) 
+{
+    LPDDRAWI_DDRAWCLIPPER_INT This = (LPDDRAWI_DDRAWCLIPPER_INT)iface;
+
+    if(!This)
+        return DDERR_INVALIDOBJECT;
+
+    if(!hWndPtr)
+        return DDERR_INVALIDPARAMS;
+
+    *hWndPtr = (HWND)This->lpLcl->lpGbl->hWnd;
+
+    return DD_OK;
+}
+
+IDirectDrawClipperVtbl DirectDrawClipper_Vtable =
+{
+    DirectDrawClipper_QueryInterface,
+    DirectDrawClipper_AddRef,
+    DirectDrawClipper_Release,
+    DirectDrawClipper_GetClipList,
+    DirectDrawClipper_GetHWnd,
+    DirectDrawClipper_Initialize,
+    DirectDrawClipper_IsClipListChanged,
+    DirectDrawClipper_SetClipList,
+    DirectDrawClipper_SetHwnd
+};
index 98e94c8..7589712 100644 (file)
 \r
 #include "rosdraw.h"\r
 \r
-\r
-ULONG WINAPI \r
-DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) \r
-{\r
-  DX_WINDBG_trace();\r
-\r
-   DX_STUB;\r
-}\r
-\r
-ULONG WINAPI \r
-DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)\r
-{\r
-  DX_WINDBG_trace();\r
-\r
-   DX_STUB;  \r
-}\r
-\r
-HRESULT WINAPI \r
-DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface, \r
-                              LPDIRECTDRAW lpDD, \r
-                              DWORD dwFlags) \r
-{\r
-   /* FIXME not implment */\r
-   DX_WINDBG_trace();\r
-   DX_STUB_DD_OK;\r
-}\r
-\r
-HRESULT WINAPI \r
-DirectDrawClipper_SetHwnd( LPDIRECTDRAWCLIPPER iface, \r
-                           DWORD dwFlags, \r
-                           HWND hWnd) \r
-{\r
-   /* FIXME not implment */\r
-   DX_WINDBG_trace();\r
-   DX_STUB_DD_OK;\r
-}\r
-\r
 HRESULT WINAPI \r
 DirectDrawClipper_GetClipList( LPDIRECTDRAWCLIPPER iface, \r
                                LPRECT lpRect, \r
@@ -66,23 +29,6 @@ DirectDrawClipper_SetClipList( LPDIRECTDRAWCLIPPER iface,
    DX_STUB;    \r
 }\r
 \r
-HRESULT WINAPI \r
-DirectDrawClipper_QueryInterface( LPDIRECTDRAWCLIPPER iface, \r
-                                  REFIID riid, \r
-                                  LPVOID* ppvObj) \r
-{\r
-   DX_WINDBG_trace();\r
-   DX_STUB;    \r
-}\r
-\r
-HRESULT WINAPI \r
-DirectDrawClipper_GetHWnd( LPDIRECTDRAWCLIPPER iface, \r
-                           HWND* hWndPtr) \r
-{\r
-   DX_WINDBG_trace();\r
-   DX_STUB;    \r
-}\r
-\r
 HRESULT WINAPI \r
 DirectDrawClipper_IsClipListChanged( LPDIRECTDRAWCLIPPER iface, \r
                                      BOOL* lpbChanged) \r
@@ -90,16 +36,3 @@ DirectDrawClipper_IsClipListChanged( LPDIRECTDRAWCLIPPER iface,
    DX_WINDBG_trace();\r
    DX_STUB;    \r
 }\r
-\r
-IDirectDrawClipperVtbl DirectDrawClipper_Vtable =\r
-{\r
-    DirectDrawClipper_QueryInterface,\r
-    DirectDrawClipper_AddRef,\r
-    DirectDrawClipper_Release,\r
-    DirectDrawClipper_GetClipList,\r
-    DirectDrawClipper_GetHWnd,\r
-    DirectDrawClipper_Initialize,\r
-    DirectDrawClipper_IsClipListChanged,\r
-    DirectDrawClipper_SetClipList,\r
-    DirectDrawClipper_SetHwnd\r
-};\r
index 3d55779..d2bea45 100644 (file)
@@ -57,9 +57,6 @@ Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface)
        DX_STUB;
 }
 
-/*
- * Status: Implentation removed due to rewrite
- */
 HRESULT WINAPI
 Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
             LPDDCAPS pHELCaps)
index 1102de2..6c402d8 100644 (file)
@@ -354,6 +354,65 @@ Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
     return DD_OK;
 }
 
+HRESULT WINAPI
+Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface,
+                                 LPDIRECTDRAWCLIPPER* ppClipper)
+{
+    LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface;
+
+       DX_WINDBG_trace();
+
+    if (This == NULL)
+    {
+       return DDERR_INVALIDOBJECT;  
+    }
+
+    if (ppClipper == NULL)
+    {
+       return DDERR_INVALIDPARAMS;  
+    }
+
+    if (This->lpLcl->lp16DDClipper == NULL)
+    {
+        return DDERR_NOCLIPPERATTACHED;
+    }
+
+    *ppClipper = (LPDIRECTDRAWCLIPPER)This->lpLcl->lp16DDClipper;
+
+    return DD_OK;    
+}
+
+HRESULT WINAPI
+Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface,
+                                 LPDIRECTDRAWCLIPPER pDDClipper)
+{
+    LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface;
+
+       DX_WINDBG_trace();
+
+    if (This == NULL)
+    {
+       return DDERR_INVALIDOBJECT;  
+    }
+
+    if(pDDClipper == NULL)
+    {
+        if(!This->lpLcl->lp16DDClipper)
+            return DDERR_NOCLIPPERATTACHED;
+        
+        DirectDrawClipper_Release((LPDIRECTDRAWCLIPPER)This->lpLcl->lp16DDClipper);
+        This->lpLcl->lp16DDClipper = NULL;
+        return DD_OK;
+    }
+
+    // FIXME: Check Surface type and return DDERR_INVALIDSURFACETYPE
+
+    DirectDrawClipper_AddRef((LPDIRECTDRAWCLIPPER)pDDClipper);
+    This->lpLcl->lp16DDClipper = (LPDDRAWI_DDRAWCLIPPER_INT)pDDClipper;
+
+    return DD_OK;
+}
+
 HRESULT WINAPI
 Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
 {
index 094667c..912c5bf 100644 (file)
@@ -115,15 +115,6 @@ Main_DDrawSurface_FreePrivateData(LPDIRECTDRAWSURFACE7 iface, REFGUID tag)
 
     DX_STUB;
 }
-
-HRESULT WINAPI
-Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface,
-                                 LPDIRECTDRAWCLIPPER* ppClipper)
-{      
-
-    DX_STUB;
-}
-
 HRESULT WINAPI
 Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
                                   LPDDCOLORKEY pCKey)
@@ -229,17 +220,6 @@ Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
     DX_STUB;
 }
 
-
-HRESULT WINAPI
-Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface,
-                                 LPDIRECTDRAWCLIPPER pDDClipper)
-{
-    DX_WINDBG_trace();
-
-    DX_STUB;
-}
-
-
 HRESULT WINAPI
 Main_DDrawSurface_SetPalette (LPDIRECTDRAWSURFACE7 iface,
                                  LPDIRECTDRAWPALETTE pPalette)
index ecd4f0b..d271369 100644 (file)
@@ -37,7 +37,8 @@
                <file>createsurface.c</file>
        </directory>    
        <directory name="Clipper">      
-               <file>clipper_stubs.c</file>            
+               <file>clipper_stubs.c</file>
+               <file>clipper_main.c</file>                     
        </directory>    
        <directory name="Color">
                <file>color_stubs.c</file>                      
index 40742f6..5a3dfe7 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "Ddraw/ddraw.h"
 #include "Surface/surface.h"
+#include "Clipper/clipper.h"
 
 /* DirectDraw startup code only internal use  */
 extern DDRAWI_DIRECTDRAW_GBL ddgbl;
index 4438c05..b717a27 100644 (file)
@@ -8,9 +8,7 @@
  *
  */
 
-#include <windows.h>
 #include "rosdraw.h"
-#include "d3dhal.h"
 #include "ddrawgdi.h"
 
 DDRAWI_DIRECTDRAW_GBL ddgbl;
@@ -555,9 +553,8 @@ StartDirectDrawHal(LPDIRECTDRAW iface, BOOL reenable)
 
     memcpy(&ddgbl.ddCaps,  &mHALInfo.ddCaps,sizeof(DDCORECAPS));
 
-    This->lpLcl->lpGbl->dwNumFourCC = mHALInfo.ddCaps.dwNumFourCCCodes;
-    This->lpLcl->lpGbl->lpdwFourCC = mpFourCC;
-
+    This->lpLcl->lpGbl->dwNumFourCC        = mHALInfo.ddCaps.dwNumFourCCCodes;
+    This->lpLcl->lpGbl->lpdwFourCC         = mpFourCC;
     This->lpLcl->lpGbl->dwMonitorFrequency = mHALInfo.dwMonitorFrequency;
     This->lpLcl->lpGbl->dwModeIndex        = mHALInfo.dwModeIndex;
     This->lpLcl->lpGbl->dwNumModes         = mHALInfo.dwNumModes;