Implement some COM-related functions.
authorMaarten Bosma <maarten@bosma.de>
Tue, 25 Oct 2005 14:03:20 +0000 (14:03 +0000)
committerMaarten Bosma <maarten@bosma.de>
Tue, 25 Oct 2005 14:03:20 +0000 (14:03 +0000)
svn path=/trunk/; revision=18767

reactos/lib/ddraw/main.c
reactos/lib/ddraw/main/clipper.c
reactos/lib/ddraw/main/color.c
reactos/lib/ddraw/main/ddraw.c
reactos/lib/ddraw/main/gamma.c
reactos/lib/ddraw/main/palette.c

index c4b236f..3ed037f 100644 (file)
@@ -101,11 +101,3 @@ HRESULT WINAPI DirectDrawEnumerateExW(
      DX_STUB;
 }
  
-HRESULT WINAPI DirectDrawCreateClipper(
-  DWORD dwFlags, 
-  LPDIRECTDRAWCLIPPER* lplpDDClipper, 
-  LPUNKNOWN pUnkOuter
-)
-{
-     DX_STUB;
-}
index 1a278d4..f4de6de 100644 (file)
 #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 @@ HRESULT WINAPI Main_DirectDrawClipper_QueryInterface(
        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) 
 {
index 9e36247..e544af9 100644 (file)
 
 #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;
 }
index ccdeab9..db4a4a1 100644 (file)
@@ -125,33 +125,6 @@ HRESULT WINAPI Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidt
        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,22 +181,89 @@ HRESULT WINAPI Main_DirectDraw_QueryInterface (
     return S_OK;
 }
 
-/**** Stubs ****/
-
-HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface) 
+HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
+                                                                                       LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) 
 {
-       DX_STUB;
+    if (pUnkOuter!=NULL) 
+               return DDERR_INVALIDPARAMS; 
+
+       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,
index 58dfc0d..4ad1a32 100644 (file)
 
 #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;
 }
index e3ec8e5..7fa14f4 100644 (file)
 
 #include "rosdraw.h"
 
-
-HRESULT WINAPI
-Main_DirectDrawPalette_GetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags,
-                                 DWORD dwStart, DWORD dwCount,
-                                 LPPALETTEENTRY palent)
+ULONG WINAPI
+Main_DirectDrawPalette_Release(LPDIRECTDRAWPALETTE iface)
 {
-    DX_STUB;
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+    ULONG ref = InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt);
+
+       return ref;
 }
 
-HRESULT WINAPI
-Main_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags,
-                                 DWORD dwStart, DWORD dwCount,
-                                 LPPALETTEENTRY palent)
+ULONG WINAPI Main_DirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE iface) 
 {
-    DX_STUB;
+    IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+    ULONG ref = InterlockedDecrement(&This->ref);
+    
+    if (ref == 0)
+               HeapFree(GetProcessHeap(), 0, This);
+
+    return ref;
 }
 
-ULONG WINAPI
-Main_DirectDrawPalette_Release(LPDIRECTDRAWPALETTE iface)
+HRESULT WINAPI
+Main_DirectDrawPalette_Initialize(LPDIRECTDRAWPALETTE iface,
+                                 LPDIRECTDRAW ddraw, DWORD dwFlags,
+                                 LPPALETTEENTRY palent)
 {
-    DX_STUB;
+    return DD_OK;
 }
 
-ULONG WINAPI Main_DirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE iface) 
+HRESULT WINAPI
+Main_DirectDrawPalette_GetEntries(LPDIRECTDRAWPALETTE iface, DWORD dwFlags,
+                                 DWORD dwStart, DWORD dwCount,
+                                 LPPALETTEENTRY palent)
 {
     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)
 {