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