Implement some COM-related functions. Modified: trunk/reactos/lib/ddraw/main/clipper.c Modified: trunk/reactos/lib/ddraw/main/color.c Modified: trunk/reactos/lib/ddraw/main/ddraw.c Modified: trunk/reactos/lib/ddraw/main/gamma.c Modified: trunk/reactos/lib/ddraw/main/palette.c Modified: trunk/reactos/lib/ddraw/main.c _____
Modified: trunk/reactos/lib/ddraw/main/clipper.c --- trunk/reactos/lib/ddraw/main/clipper.c 2005-10-24 23:46:55 UTC (rev 18766) +++ trunk/reactos/lib/ddraw/main/clipper.c 2005-10-25 14:03:20 UTC (rev 18767) @@ -11,14 +11,34 @@
#include "rosdraw.h"
-HRESULT WINAPI Main_DirectDrawClipper_SetHwnd( - LPDIRECTDRAWCLIPPER iface, DWORD dwFlags, HWND hWnd) +ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) { - DX_STUB; + IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + ULONG ref = InterlockedDecrement(&This->ref); + + if (ref == 0) + HeapFree(GetProcessHeap(), 0, This); + + return ref; }
-ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) +ULONG WINAPI Main_DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface) { + IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + ULONG ref = InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt); + + return ref; +} + +HRESULT WINAPI Main_DirectDrawClipper_Initialize( + LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags) +{ + return DD_OK; +} + +HRESULT WINAPI Main_DirectDrawClipper_SetHwnd( + LPDIRECTDRAWCLIPPER iface, DWORD dwFlags, HWND hWnd) +{ DX_STUB; }
@@ -41,23 +61,12 @@ DX_STUB; }
-ULONG WINAPI Main_DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface) -{ - DX_STUB; -} - HRESULT WINAPI Main_DirectDrawClipper_GetHWnd( LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr) { DX_STUB; }
-HRESULT WINAPI Main_DirectDrawClipper_Initialize( - LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags) -{ - DX_STUB; -} - HRESULT WINAPI Main_DirectDrawClipper_IsClipListChanged( LPDIRECTDRAWCLIPPER iface, BOOL* lpbChanged) { _____
Modified: trunk/reactos/lib/ddraw/main/color.c --- trunk/reactos/lib/ddraw/main/color.c 2005-10-24 23:46:55 UTC (rev 18766) +++ trunk/reactos/lib/ddraw/main/color.c 2005-10-25 14:03:20 UTC (rev 18767) @@ -10,22 +10,31 @@
#include "rosdraw.h"
-HRESULT WINAPI -Main_DirectDrawColorControl_QueryInterface(LPDIRECTDRAWCOLORCONTROL iface, - REFIID riid, LPVOID* ppvObj) -{ - DX_STUB; -} - ULONG WINAPI Main_DirectDrawColorControl_AddRef(LPDIRECTDRAWCOLORCONTROL iface) { - DX_STUB; + IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + ULONG ref = InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt); + + return ref; }
ULONG WINAPI Main_DirectDrawColorControl_Release(LPDIRECTDRAWCOLORCONTROL iface) { + IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + ULONG ref = InterlockedDecrement(&This->ref); + + if (ref == 0) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + +HRESULT WINAPI +Main_DirectDrawColorControl_QueryInterface(LPDIRECTDRAWCOLORCONTROL iface, + REFIID riid, LPVOID* ppvObj) +{ DX_STUB; }
_____
Modified: trunk/reactos/lib/ddraw/main/ddraw.c --- trunk/reactos/lib/ddraw/main/ddraw.c 2005-10-24 23:46:55 UTC (rev 18766) +++ trunk/reactos/lib/ddraw/main/ddraw.c 2005-10-25 14:03:20 UTC (rev 18767) @@ -125,33 +125,6 @@
return DD_OK; }
-HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, - LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) -{ - if (pUnkOuter!=NULL) - return DDERR_INVALIDPARAMS; - - if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize) - return DDERR_UNSUPPORTED; - - // the nasty com stuff - IDirectDrawSurfaceImpl* That; - - That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawSurfaceImpl)); - - if (That == NULL) - return E_OUTOFMEMORY; - - That->lpVtbl = &DirectDrawSurface7_Vtable; - That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable; - - That->ref = 1; - *ppSurf = (LPDIRECTDRAWSURFACE7)That; - - // the real surface object creation - return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface, pDDSD); -} - ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) { IDirectDrawImpl* This = (IDirectDrawImpl*)iface; @@ -208,24 +181,91 @@ return S_OK; }
-/**** Stubs ****/ +HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, + LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) +{ + if (pUnkOuter!=NULL) + return DDERR_INVALIDPARAMS;
-HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface) -{ - DX_STUB; + if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize) + return DDERR_UNSUPPORTED; + + // the nasty com stuff + IDirectDrawSurfaceImpl* That; + + That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawSurfaceImpl)); + + if (That == NULL) + return E_OUTOFMEMORY; + + ZeroMemory(That, sizeof(IDirectDrawSurfaceImpl)); + + That->lpVtbl = &DirectDrawSurface7_Vtable; + That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable; + That->ref = 1; + + *ppSurf = (LPDIRECTDRAWSURFACE7)That; + + // the real surface object creation + return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface, pDDSD); }
HRESULT WINAPI Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, DWORD dwFlags,
LPDIRECTDRAWCLIPPER *ppClipper, IUnknown *pUnkOuter) { - DX_STUB; + if (pUnkOuter!=NULL) + return DDERR_INVALIDPARAMS; + + IDirectDrawClipperImpl* That; + That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl)); + + if (That == NULL) + return E_OUTOFMEMORY; + + ZeroMemory(That, sizeof(IDirectDrawClipperImpl)); + + That->lpVtbl = &DirectDrawClipper_Vtable; + That->ref = 1; + *ppClipper = (LPDIRECTDRAWCLIPPER)That; + + return That->lpVtbl->Initialize (*ppClipper, (LPDIRECTDRAW)iface, dwFlags); } + +// This function is exported by the dll +HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags, + LPDIRECTDRAWCLIPPER* lplpDDClipper, LPUNKNOWN pUnkOuter) +{ + return Main_DirectDraw_CreateClipper(NULL, dwFlags, lplpDDClipper, pUnkOuter); +} + HRESULT WINAPI Main_DirectDraw_CreatePalette(LPDIRECTDRAW7 iface, DWORD dwFlags, - LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE* ppPalette,LPUNKNOWN pUnknown) + LPPALETTEENTRY palent, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter) { - DX_STUB; + if (pUnkOuter!=NULL) + return DDERR_INVALIDPARAMS; + + IDirectDrawPaletteImpl* That; + That = (IDirectDrawPaletteImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawPaletteImpl)); + + if (That == NULL) + return E_OUTOFMEMORY; + + ZeroMemory(That, sizeof(IDirectDrawPaletteImpl)); + + That->lpVtbl = &DirectDrawPalette_Vtable; + That->ref = 1; + *ppPalette = (LPDIRECTDRAWPALETTE)That; + + return That->lpVtbl->Initialize (*ppPalette, (LPDIRECTDRAW)iface, dwFlags, palent); }
+/**** Stubs ****/ + +HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface) +{ + DX_STUB; +} + HRESULT WINAPI Main_DirectDraw_DuplicateSurface(LPDIRECTDRAW7 iface, LPDIRECTDRAWSURFACE7 src, LPDIRECTDRAWSURFACE7* dst) { _____
Modified: trunk/reactos/lib/ddraw/main/gamma.c --- trunk/reactos/lib/ddraw/main/gamma.c 2005-10-24 23:46:55 UTC (rev 18766) +++ trunk/reactos/lib/ddraw/main/gamma.c 2005-10-25 14:03:20 UTC (rev 18767) @@ -10,23 +10,31 @@
#include "rosdraw.h"
- -HRESULT WINAPI -Main_DirectDrawGammaControl_QueryInterface(LPDIRECTDRAWGAMMACONTROL iface, REFIID riid, - LPVOID *ppObj) -{ - DX_STUB; -} - ULONG WINAPI Main_DirectDrawGammaControl_AddRef(LPDIRECTDRAWGAMMACONTROL iface) { - DX_STUB; + IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + ULONG ref = InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt); + + return ref; }
ULONG WINAPI Main_DirectDrawGammaControl_Release(LPDIRECTDRAWGAMMACONTROL iface) { + IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + ULONG ref = InterlockedDecrement(&This->ref); + + if (ref == 0) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + +HRESULT WINAPI +Main_DirectDrawGammaControl_QueryInterface(LPDIRECTDRAWGAMMACONTROL iface, REFIID riid, + LPVOID *ppObj) +{ DX_STUB; }
_____
Modified: trunk/reactos/lib/ddraw/main/palette.c --- trunk/reactos/lib/ddraw/main/palette.c 2005-10-24 23:46:55 UTC (rev 18766) +++ trunk/reactos/lib/ddraw/main/palette.c 2005-10-25 14:03:20 UTC (rev 18767) @@ -10,42 +10,49 @@
#include "rosdraw.h"
+ULONG WINAPI +Main_DirectDrawPalette_Release(LPDIRECTDRAWPALETTE iface) +{ + IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + ULONG ref = InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt);
+ return ref; +} + +ULONG WINAPI Main_DirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE iface) +{ + IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + ULONG ref = InterlockedDecrement(&This->ref); + + if (ref == 0) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + HRESULT WINAPI -Main_DirectDrawPalette_GetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags, - DWORD dwStart, DWORD dwCount, +Main_DirectDrawPalette_Initialize(LPDIRECTDRAWPALETTE iface, + LPDIRECTDRAW ddraw, DWORD dwFlags, LPPALETTEENTRY palent) { - DX_STUB; + return DD_OK; }
HRESULT WINAPI -Main_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags, +Main_DirectDrawPalette_GetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags, DWORD dwStart, DWORD dwCount, LPPALETTEENTRY palent) { DX_STUB; }
-ULONG WINAPI -Main_DirectDrawPalette_Release(LPDIRECTDRAWPALETTE iface) -{ - DX_STUB; -} - -ULONG WINAPI Main_DirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE iface) -{ - DX_STUB; -} - HRESULT WINAPI -Main_DirectDrawPalette_Initialize(LPDIRECTDRAWPALETTE iface, - LPDIRECTDRAW ddraw, DWORD dwFlags, +Main_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags, + DWORD dwStart, DWORD dwCount, LPPALETTEENTRY palent) { DX_STUB; } - HRESULT WINAPI Main_DirectDrawPalette_GetCaps(LPDIRECTDRAWPALETTE iface, LPDWORD lpdwCaps) { _____
Modified: trunk/reactos/lib/ddraw/main.c --- trunk/reactos/lib/ddraw/main.c 2005-10-24 23:46:55 UTC (rev 18766) +++ trunk/reactos/lib/ddraw/main.c 2005-10-25 14:03:20 UTC (rev 18767) @@ -101,11 +101,3 @@
DX_STUB; }
-HRESULT WINAPI DirectDrawCreateClipper( - DWORD dwFlags, - LPDIRECTDRAWCLIPPER* lplpDDClipper, - LPUNKNOWN pUnkOuter -) -{ - DX_STUB; -}