Added mappings for a few messages.
[wine] / dlls / ddraw / dclipper / main.c
1 /*              DirectDrawClipper implementation
2  *
3  * Copyright 2000 Marcus Meissner
4  * Copyright 2000 TransGaming Technologies Inc.
5  */
6
7 #include "config.h"
8
9 #include <stdlib.h>
10 #include <string.h>
11
12 #include "ddraw.h"
13 #include "winerror.h"
14
15 #include "ddraw_private.h"
16 #include "dclipper/main.h"
17 #include "ddraw/main.h"
18
19 #include "debugtools.h"
20
21 DEFAULT_DEBUG_CHANNEL(ddraw);
22
23 /******************************************************************************
24  *                      DirectDrawCreateClipper (DDRAW.@)
25  */
26
27 static ICOM_VTABLE(IDirectDrawClipper) DDRAW_Clipper_VTable;
28
29 HRESULT WINAPI DirectDrawCreateClipper(
30     DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, LPUNKNOWN pUnkOuter
31 ) {
32     IDirectDrawClipperImpl* This;
33     TRACE("(%08lx,%p,%p)\n", dwFlags, lplpDDClipper, pUnkOuter);
34
35     if (pUnkOuter != NULL) return CLASS_E_NOAGGREGATION;
36
37     This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
38                      sizeof(IDirectDrawClipperImpl));
39     if (This == NULL) return E_OUTOFMEMORY;
40
41     ICOM_INIT_INTERFACE(This, IDirectDrawClipper, DDRAW_Clipper_VTable);
42     This->ref = 1;
43     This->hWnd = 0; 
44     This->ddraw_owner = NULL;
45
46     *lplpDDClipper = ICOM_INTERFACE(This, IDirectDrawClipper);
47     return DD_OK;
48 }
49
50 /* This is the classfactory implementation. */
51 HRESULT DDRAW_CreateDirectDrawClipper(IUnknown* pUnkOuter, REFIID riid,
52                                       LPVOID* ppObj)
53 {
54     HRESULT hr;
55     LPDIRECTDRAWCLIPPER pClip;
56
57     hr = DirectDrawCreateClipper(0, &pClip, pUnkOuter);
58     if (FAILED(hr)) return hr;
59
60     hr = IDirectDrawClipper_QueryInterface(pClip, riid, ppObj);
61     IDirectDrawClipper_Release(pClip);
62     return hr;
63 }
64
65 /******************************************************************************
66  *                      IDirectDrawClipper
67  */
68 HRESULT WINAPI Main_DirectDrawClipper_SetHwnd(
69     LPDIRECTDRAWCLIPPER iface, DWORD dwFlags, HWND hWnd
70 ) {
71     ICOM_THIS(IDirectDrawClipperImpl,iface);
72
73     TRACE("(%p)->SetHwnd(0x%08lx,0x%08lx)\n",This,dwFlags,(DWORD)hWnd);
74     if( dwFlags ) {
75         FIXME("dwFlags = 0x%08lx, not supported.\n",dwFlags);
76         return DDERR_INVALIDPARAMS; 
77     }
78
79     This->hWnd = hWnd;
80     return DD_OK;
81 }
82
83 static void Main_DirectDrawClipper_Destroy(IDirectDrawClipperImpl* This)
84 {
85     if (This->ddraw_owner != NULL)
86         Main_DirectDraw_RemoveClipper(This->ddraw_owner, This);
87
88     HeapFree(GetProcessHeap(), 0 ,This);
89 }
90
91 void Main_DirectDrawClipper_ForceDestroy(IDirectDrawClipperImpl* This)
92 {
93     WARN("deleting clipper %p with refcnt %lu\n", This, This->ref);
94     Main_DirectDrawClipper_Destroy(This);
95 }
96
97 ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) {
98     ICOM_THIS(IDirectDrawClipperImpl,iface);
99     TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
100
101     if (--This->ref == 0)
102     {
103         Main_DirectDrawClipper_Destroy(This);
104         return 0;
105     }
106     else return This->ref;
107 }
108
109 HRESULT WINAPI Main_DirectDrawClipper_GetClipList(
110     LPDIRECTDRAWCLIPPER iface,LPRECT prcClip,LPRGNDATA lprgn,LPDWORD pdwSize
111 ) {
112     ICOM_THIS(IDirectDrawClipperImpl,iface);
113     static int warned = 0;
114     if (warned++ < 10)
115         FIXME("(%p,%p,%p,%p),stub!\n",This,prcClip,lprgn,pdwSize);
116     if (pdwSize) *pdwSize=0;
117     return DDERR_NOCLIPLIST;
118 }
119
120 HRESULT WINAPI Main_DirectDrawClipper_SetClipList(
121     LPDIRECTDRAWCLIPPER iface,LPRGNDATA lprgn,DWORD pdwSize
122 ) {
123     ICOM_THIS(IDirectDrawClipperImpl,iface);
124     FIXME("(%p,%p,%ld),stub!\n",This,lprgn,pdwSize);
125     return DD_OK;
126 }
127
128 HRESULT WINAPI Main_DirectDrawClipper_QueryInterface(
129     LPDIRECTDRAWCLIPPER iface, REFIID riid, LPVOID* ppvObj
130 ) {
131     ICOM_THIS(IDirectDrawClipperImpl,iface);
132
133     if (IsEqualGUID(&IID_IUnknown, riid)
134         || IsEqualGUID(&IID_IDirectDrawClipper, riid))
135     {
136         *ppvObj = ICOM_INTERFACE(This, IDirectDrawClipper);
137         ++This->ref;
138         return S_OK;
139     }
140     else
141     {
142         return E_NOINTERFACE;
143     }
144 }
145
146 ULONG WINAPI Main_DirectDrawClipper_AddRef( LPDIRECTDRAWCLIPPER iface )
147 {
148     ICOM_THIS(IDirectDrawClipperImpl,iface);
149     TRACE("(%p)->() incrementing from %lu.\n", This, This->ref );
150     return ++This->ref;
151 }
152
153 HRESULT WINAPI Main_DirectDrawClipper_GetHWnd(
154     LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr
155 ) {
156     ICOM_THIS(IDirectDrawClipperImpl,iface);
157     FIXME("(%p)->(%p),stub!\n",This,hWndPtr);
158
159     *hWndPtr = This->hWnd; 
160
161     return DD_OK;
162 }
163
164 HRESULT WINAPI Main_DirectDrawClipper_Initialize(
165      LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags
166 ) {
167     IDirectDrawImpl* pOwner;
168     ICOM_THIS(IDirectDrawClipperImpl,iface);
169     FIXME("(%p)->(%p,0x%08lx),stub!\n",This,lpDD,dwFlags);
170
171     if (This->ddraw_owner != NULL) return DDERR_ALREADYINITIALIZED;
172
173     pOwner = ICOM_OBJECT(IDirectDrawImpl, IDirectDraw, lpDD);
174     This->ddraw_owner = pOwner;
175     Main_DirectDraw_AddClipper(pOwner, This);
176
177     return DD_OK;
178 }
179
180 HRESULT WINAPI Main_DirectDrawClipper_IsClipListChanged(
181     LPDIRECTDRAWCLIPPER iface, BOOL* lpbChanged
182 ) {
183     ICOM_THIS(IDirectDrawClipperImpl,iface);
184     FIXME("(%p)->(%p),stub!\n",This,lpbChanged);
185
186     /* XXX What is safest? */
187     *lpbChanged = FALSE;
188
189     return DD_OK;
190 }
191
192 static ICOM_VTABLE(IDirectDrawClipper) DDRAW_Clipper_VTable =
193 {
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
204 };