Some Clipper Code.

svn path=/trunk/; revision=27043
This commit is contained in:
Maarten Bosma 2007-06-07 11:49:43 +00:00
parent 6a3725e689
commit d4c1add2a8
9 changed files with 217 additions and 96 deletions

View file

@ -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);

View file

@ -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
};

View file

@ -10,43 +10,6 @@
#include "rosdraw.h"
ULONG WINAPI
DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
{
DX_WINDBG_trace();
DX_STUB;
}
ULONG WINAPI
DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
{
DX_WINDBG_trace();
DX_STUB;
}
HRESULT WINAPI
DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface,
LPDIRECTDRAW lpDD,
DWORD dwFlags)
{
/* FIXME not implment */
DX_WINDBG_trace();
DX_STUB_DD_OK;
}
HRESULT WINAPI
DirectDrawClipper_SetHwnd( LPDIRECTDRAWCLIPPER iface,
DWORD dwFlags,
HWND hWnd)
{
/* FIXME not implment */
DX_WINDBG_trace();
DX_STUB_DD_OK;
}
HRESULT WINAPI
DirectDrawClipper_GetClipList( LPDIRECTDRAWCLIPPER iface,
LPRECT lpRect,
@ -66,23 +29,6 @@ DirectDrawClipper_SetClipList( LPDIRECTDRAWCLIPPER iface,
DX_STUB;
}
HRESULT WINAPI
DirectDrawClipper_QueryInterface( LPDIRECTDRAWCLIPPER iface,
REFIID riid,
LPVOID* ppvObj)
{
DX_WINDBG_trace();
DX_STUB;
}
HRESULT WINAPI
DirectDrawClipper_GetHWnd( LPDIRECTDRAWCLIPPER iface,
HWND* hWndPtr)
{
DX_WINDBG_trace();
DX_STUB;
}
HRESULT WINAPI
DirectDrawClipper_IsClipListChanged( LPDIRECTDRAWCLIPPER iface,
BOOL* lpbChanged)
@ -90,16 +36,3 @@ DirectDrawClipper_IsClipListChanged( LPDIRECTDRAWCLIPPER iface,
DX_WINDBG_trace();
DX_STUB;
}
IDirectDrawClipperVtbl DirectDrawClipper_Vtable =
{
DirectDrawClipper_QueryInterface,
DirectDrawClipper_AddRef,
DirectDrawClipper_Release,
DirectDrawClipper_GetClipList,
DirectDrawClipper_GetHWnd,
DirectDrawClipper_Initialize,
DirectDrawClipper_IsClipListChanged,
DirectDrawClipper_SetClipList,
DirectDrawClipper_SetHwnd
};

View 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)

View 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)
{

View 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)

View 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>

View 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;

View 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;