--- /dev/null
+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);
--- /dev/null
+/* $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
+};
\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
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
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
DX_STUB;
}
-/*
- * Status: Implentation removed due to rewrite
- */
HRESULT WINAPI
Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
LPDDCAPS pHELCaps)
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)
{
DX_STUB;
}
-
-HRESULT WINAPI
-Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface,
- LPDIRECTDRAWCLIPPER* ppClipper)
-{
-
- DX_STUB;
-}
-
HRESULT WINAPI
Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
LPDDCOLORKEY pCKey)
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)
<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>
#include "Ddraw/ddraw.h"
#include "Surface/surface.h"
+#include "Clipper/clipper.h"
/* DirectDraw startup code only internal use */
extern DDRAWI_DIRECTDRAW_GBL ddgbl;
*
*/
-#include <windows.h>
#include "rosdraw.h"
-#include "d3dhal.h"
#include "ddrawgdi.h"
DDRAWI_DIRECTDRAW_GBL ddgbl;
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;