1 /* DirectDrawClipper implementation
3 * Copyright 2000 Marcus Meissner
4 * Copyright 2000 TransGaming Technologies Inc.
15 #include "ddraw_private.h"
16 #include "dclipper/main.h"
17 #include "ddraw/main.h"
19 #include "debugtools.h"
21 DEFAULT_DEBUG_CHANNEL(ddraw);
23 /******************************************************************************
24 * DirectDrawCreateClipper (DDRAW.@)
27 static ICOM_VTABLE(IDirectDrawClipper) DDRAW_Clipper_VTable;
29 HRESULT WINAPI DirectDrawCreateClipper(
30 DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, LPUNKNOWN pUnkOuter
32 IDirectDrawClipperImpl* This;
33 TRACE("(%08lx,%p,%p)\n", dwFlags, lplpDDClipper, pUnkOuter);
35 if (pUnkOuter != NULL) return CLASS_E_NOAGGREGATION;
37 This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
38 sizeof(IDirectDrawClipperImpl));
39 if (This == NULL) return E_OUTOFMEMORY;
41 ICOM_INIT_INTERFACE(This, IDirectDrawClipper, DDRAW_Clipper_VTable);
44 This->ddraw_owner = NULL;
46 *lplpDDClipper = ICOM_INTERFACE(This, IDirectDrawClipper);
50 /* This is the classfactory implementation. */
51 HRESULT DDRAW_CreateDirectDrawClipper(IUnknown* pUnkOuter, REFIID riid,
55 LPDIRECTDRAWCLIPPER pClip;
57 hr = DirectDrawCreateClipper(0, &pClip, pUnkOuter);
58 if (FAILED(hr)) return hr;
60 hr = IDirectDrawClipper_QueryInterface(pClip, riid, ppObj);
61 IDirectDrawClipper_Release(pClip);
65 /******************************************************************************
68 HRESULT WINAPI Main_DirectDrawClipper_SetHwnd(
69 LPDIRECTDRAWCLIPPER iface, DWORD dwFlags, HWND hWnd
71 ICOM_THIS(IDirectDrawClipperImpl,iface);
73 TRACE("(%p)->SetHwnd(0x%08lx,0x%08lx)\n",This,dwFlags,(DWORD)hWnd);
75 FIXME("dwFlags = 0x%08lx, not supported.\n",dwFlags);
76 return DDERR_INVALIDPARAMS;
83 static void Main_DirectDrawClipper_Destroy(IDirectDrawClipperImpl* This)
85 if (This->ddraw_owner != NULL)
86 Main_DirectDraw_RemoveClipper(This->ddraw_owner, This);
88 HeapFree(GetProcessHeap(), 0 ,This);
91 void Main_DirectDrawClipper_ForceDestroy(IDirectDrawClipperImpl* This)
93 WARN("deleting clipper %p with refcnt %lu\n", This, This->ref);
94 Main_DirectDrawClipper_Destroy(This);
97 ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) {
98 ICOM_THIS(IDirectDrawClipperImpl,iface);
99 TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
101 if (--This->ref == 0)
103 Main_DirectDrawClipper_Destroy(This);
106 else return This->ref;
109 HRESULT WINAPI Main_DirectDrawClipper_GetClipList(
110 LPDIRECTDRAWCLIPPER iface,LPRECT prcClip,LPRGNDATA lprgn,LPDWORD pdwSize
112 ICOM_THIS(IDirectDrawClipperImpl,iface);
113 static int warned = 0;
115 FIXME("(%p,%p,%p,%p),stub!\n",This,prcClip,lprgn,pdwSize);
116 if (pdwSize) *pdwSize=0;
117 return DDERR_NOCLIPLIST;
120 HRESULT WINAPI Main_DirectDrawClipper_SetClipList(
121 LPDIRECTDRAWCLIPPER iface,LPRGNDATA lprgn,DWORD pdwSize
123 ICOM_THIS(IDirectDrawClipperImpl,iface);
124 FIXME("(%p,%p,%ld),stub!\n",This,lprgn,pdwSize);
128 HRESULT WINAPI Main_DirectDrawClipper_QueryInterface(
129 LPDIRECTDRAWCLIPPER iface, REFIID riid, LPVOID* ppvObj
131 ICOM_THIS(IDirectDrawClipperImpl,iface);
133 if (IsEqualGUID(&IID_IUnknown, riid)
134 || IsEqualGUID(&IID_IDirectDrawClipper, riid))
136 *ppvObj = ICOM_INTERFACE(This, IDirectDrawClipper);
142 return E_NOINTERFACE;
146 ULONG WINAPI Main_DirectDrawClipper_AddRef( LPDIRECTDRAWCLIPPER iface )
148 ICOM_THIS(IDirectDrawClipperImpl,iface);
149 TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
153 HRESULT WINAPI Main_DirectDrawClipper_GetHWnd(
154 LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr
156 ICOM_THIS(IDirectDrawClipperImpl,iface);
157 FIXME("(%p)->(%p),stub!\n",This,hWndPtr);
159 *hWndPtr = This->hWnd;
164 HRESULT WINAPI Main_DirectDrawClipper_Initialize(
165 LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags
167 IDirectDrawImpl* pOwner;
168 ICOM_THIS(IDirectDrawClipperImpl,iface);
169 FIXME("(%p)->(%p,0x%08lx),stub!\n",This,lpDD,dwFlags);
171 if (This->ddraw_owner != NULL) return DDERR_ALREADYINITIALIZED;
173 pOwner = ICOM_OBJECT(IDirectDrawImpl, IDirectDraw, lpDD);
174 This->ddraw_owner = pOwner;
175 Main_DirectDraw_AddClipper(pOwner, This);
180 HRESULT WINAPI Main_DirectDrawClipper_IsClipListChanged(
181 LPDIRECTDRAWCLIPPER iface, BOOL* lpbChanged
183 ICOM_THIS(IDirectDrawClipperImpl,iface);
184 FIXME("(%p)->(%p),stub!\n",This,lpbChanged);
186 /* XXX What is safest? */
192 static ICOM_VTABLE(IDirectDrawClipper) DDRAW_Clipper_VTable =
194 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
195 Main_DirectDrawClipper_QueryInterface,
196 Main_DirectDrawClipper_AddRef,
197 Main_DirectDrawClipper_Release,
198 Main_DirectDrawClipper_GetClipList,
199 Main_DirectDrawClipper_GetHWnd,
200 Main_DirectDrawClipper_Initialize,
201 Main_DirectDrawClipper_IsClipListChanged,
202 Main_DirectDrawClipper_SetClipList,
203 Main_DirectDrawClipper_SetHwnd