Fixes for -Wmissing-declaration and -Wwrite-string warnings.
[wine] / dlls / ddraw / surface_thunks.c
1 /* IDirectDrawSurface3 -> IDirectDrawSurface7 thunks
2  * Copyright 2000 TransGaming Technologies Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #include "config.h"
20 #include <stdarg.h>
21
22 #define CONST_VTABLE
23
24 #include "windef.h"
25 #include "winbase.h"
26 #include "wingdi.h"
27 #include "ddraw.h"
28 #include "winerror.h"
29
30 #include "ddraw_private.h"
31 #include "ddcomimpl.h"
32
33 #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,        \
34                                          IDirectDrawSurface3,           \
35                                          IDirectDrawSurface7,           \
36                                          (pdds))
37
38 #define CONVERT_REV(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,    \
39                                              IDirectDrawSurface7,       \
40                                              IDirectDrawSurface3,       \
41                                              (pdds))
42
43 static HRESULT WINAPI
44 IDirectDrawSurface3Impl_QueryInterface(LPDIRECTDRAWSURFACE3 This, REFIID iid,
45                                        LPVOID *ppObj)
46 {
47     return IDirectDrawSurface7_QueryInterface(CONVERT(This), iid, ppObj);
48 }
49
50 static ULONG WINAPI
51 IDirectDrawSurface3Impl_AddRef(LPDIRECTDRAWSURFACE3 This)
52 {
53     return IDirectDrawSurface7_AddRef(CONVERT(This));
54 }
55
56 static ULONG WINAPI
57 IDirectDrawSurface3Impl_Release(LPDIRECTDRAWSURFACE3 This)
58 {
59     return IDirectDrawSurface7_Release(CONVERT(This));
60 }
61
62 static HRESULT WINAPI
63 IDirectDrawSurface3Impl_AddAttachedSurface(LPDIRECTDRAWSURFACE3 This,
64                                            LPDIRECTDRAWSURFACE3 pAttach)
65 {
66     return IDirectDrawSurface7_AddAttachedSurface(CONVERT(This),
67                                                   CONVERT(pAttach));
68 }
69
70 static HRESULT WINAPI
71 IDirectDrawSurface3Impl_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE3 This,
72                                             LPRECT pRect)
73 {
74     return IDirectDrawSurface7_AddOverlayDirtyRect(CONVERT(This), pRect);
75 }
76
77 static HRESULT WINAPI
78 IDirectDrawSurface3Impl_Blt(LPDIRECTDRAWSURFACE3 This, LPRECT prcDst,
79                             LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc,
80                             DWORD dwFlags, LPDDBLTFX pFX)
81 {
82     return IDirectDrawSurface7_Blt(CONVERT(This), prcDst, CONVERT(pSrcSurf),
83                                    prcSrc, dwFlags, pFX);
84 }
85
86 static HRESULT WINAPI
87 IDirectDrawSurface3Impl_BltBatch(LPDIRECTDRAWSURFACE3 This,
88                                  LPDDBLTBATCH pBatch, DWORD dwCount,
89                                  DWORD dwFlags)
90 {
91     return IDirectDrawSurface7_BltBatch(CONVERT(This), pBatch, dwCount,
92                                         dwFlags);
93 }
94
95 static HRESULT WINAPI
96 IDirectDrawSurface3Impl_BltFast(LPDIRECTDRAWSURFACE3 This, DWORD x, DWORD y,
97                                 LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc,
98                                 DWORD dwTrans)
99 {
100     return IDirectDrawSurface7_BltFast(CONVERT(This), x, y, CONVERT(pSrcSurf),
101                                        prcSrc, dwTrans);
102 }
103
104 static HRESULT WINAPI
105 IDirectDrawSurface3Impl_DeleteAttachedSurface(LPDIRECTDRAWSURFACE3 This,
106                                               DWORD dwFlags,
107                                               LPDIRECTDRAWSURFACE3 pAttached)
108 {
109     return IDirectDrawSurface7_DeleteAttachedSurface(CONVERT(This), dwFlags,
110                                                      CONVERT(pAttached));
111 }
112
113 struct callback_info
114 {
115     LPDDENUMSURFACESCALLBACK callback;
116     LPVOID context;
117 };
118
119 static HRESULT CALLBACK
120 EnumCallback(LPDIRECTDRAWSURFACE7 iface, LPDDSURFACEDESC2 pDDSD,
121              LPVOID context)
122 {
123     const struct callback_info* info = context;
124
125 #if 0
126     /* This is an outgoing conversion so we have to do it. */
127     DDSURFACEDESC ddsd;
128     memset(&ddsd, 0, sizeof(ddsd));
129     ddsd.dwSize = sizeof(ddsd);
130     DDRAW_Convert_DDSURFACEDESC_2_To_1(pDDSD, &ddsd);
131 #endif
132
133     /* the LPDDSURFACEDESC2 -> LPDDSURFACEDESC coercion is safe, since
134      * the data format is compatible with older enum procs */
135     return info->callback((LPDIRECTDRAWSURFACE)CONVERT_REV(iface), (LPDDSURFACEDESC)pDDSD,
136                           info->context);
137 }
138
139 static HRESULT WINAPI
140 IDirectDrawSurface3Impl_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 This,
141                                              LPVOID context,
142                                              LPDDENUMSURFACESCALLBACK callback)
143 {
144     struct callback_info info;
145
146     info.callback = callback;
147     info.context  = context;
148
149     return IDirectDrawSurface7_EnumAttachedSurfaces(CONVERT(This), &info,
150                                                     EnumCallback);
151 }
152
153 static HRESULT WINAPI
154 IDirectDrawSurface3Impl_EnumOverlayZOrders(LPDIRECTDRAWSURFACE3 This,
155                                            DWORD dwFlags, LPVOID context,
156                                            LPDDENUMSURFACESCALLBACK callback)
157 {
158     struct callback_info info;
159
160     info.callback = callback;
161     info.context  = context;
162
163     return IDirectDrawSurface7_EnumOverlayZOrders(CONVERT(This), dwFlags,
164                                                   &info, EnumCallback);
165 }
166
167 static HRESULT WINAPI
168 IDirectDrawSurface3Impl_Flip(LPDIRECTDRAWSURFACE3 This,
169                              LPDIRECTDRAWSURFACE3 pOverride, DWORD dwFlags)
170 {
171     return IDirectDrawSurface7_Flip(CONVERT(This), CONVERT(pOverride),
172                                     dwFlags);
173 }
174
175 static HRESULT WINAPI
176 IDirectDrawSurface3Impl_GetAttachedSurface(LPDIRECTDRAWSURFACE3 This,
177                                            LPDDSCAPS pCaps,
178                                            LPDIRECTDRAWSURFACE3* ppAttached)
179 {
180     DDSCAPS2 caps;
181     LPDIRECTDRAWSURFACE7 pAttached7;
182     HRESULT hr;
183
184     caps.dwCaps  = pCaps->dwCaps;
185     caps.dwCaps2 = 0;
186     caps.dwCaps3 = 0;
187     caps.dwCaps4 = 0;
188
189     hr = IDirectDrawSurface7_GetAttachedSurface(CONVERT(This), &caps,
190                                                 &pAttached7);
191     if (FAILED(hr)) return hr;
192
193     *ppAttached = CONVERT_REV(pAttached7);
194     return hr;
195 }
196
197 static HRESULT WINAPI
198 IDirectDrawSurface3Impl_GetBltStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
199 {
200     return IDirectDrawSurface7_GetBltStatus(CONVERT(This), dwFlags);
201 }
202
203 static HRESULT WINAPI
204 IDirectDrawSurface3Impl_GetCaps(LPDIRECTDRAWSURFACE3 This, LPDDSCAPS pCaps)
205 {
206     DDSCAPS2 caps;
207     HRESULT hr;
208
209     hr = IDirectDrawSurface7_GetCaps(CONVERT(This), &caps);
210     if (FAILED(hr)) return hr;
211
212     pCaps->dwCaps = caps.dwCaps;
213     return hr;
214 }
215
216 static HRESULT WINAPI
217 IDirectDrawSurface3Impl_GetClipper(LPDIRECTDRAWSURFACE3 This,
218                                    LPDIRECTDRAWCLIPPER* ppClipper)
219 {
220     return IDirectDrawSurface7_GetClipper(CONVERT(This), ppClipper);
221 }
222
223 static HRESULT WINAPI
224 IDirectDrawSurface3Impl_GetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags,
225                                     LPDDCOLORKEY pCKey)
226 {
227     return IDirectDrawSurface7_GetColorKey(CONVERT(This), dwFlags, pCKey);
228 }
229
230 static HRESULT WINAPI
231 IDirectDrawSurface3Impl_GetDC(LPDIRECTDRAWSURFACE3 This, HDC* phDC)
232 {
233     return IDirectDrawSurface7_GetDC(CONVERT(This), phDC);
234 }
235
236 static HRESULT WINAPI
237 IDirectDrawSurface3Impl_GetFlipStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
238 {
239     return IDirectDrawSurface7_GetFlipStatus(CONVERT(This), dwFlags);
240 }
241
242 static HRESULT WINAPI
243 IDirectDrawSurface3Impl_GetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LPLONG pX,
244                                        LPLONG pY)
245 {
246     return IDirectDrawSurface7_GetOverlayPosition(CONVERT(This), pX, pY);
247 }
248
249 static HRESULT WINAPI
250 IDirectDrawSurface3Impl_GetPalette(LPDIRECTDRAWSURFACE3 This,
251                                    LPDIRECTDRAWPALETTE* ppPalette)
252 {
253     return IDirectDrawSurface7_GetPalette(CONVERT(This), ppPalette);
254 }
255
256 static HRESULT WINAPI
257 IDirectDrawSurface3Impl_GetPixelFormat(LPDIRECTDRAWSURFACE3 This,
258                                        LPDDPIXELFORMAT pPixelFormat)
259 {
260     return IDirectDrawSurface7_GetPixelFormat(CONVERT(This), pPixelFormat);
261 }
262
263 static HRESULT WINAPI
264 IDirectDrawSurface3Impl_GetSurfaceDesc(LPDIRECTDRAWSURFACE3 This,
265                                        LPDDSURFACEDESC pDDSD)
266 {
267     return IDirectDrawSurface7_GetSurfaceDesc(CONVERT(This),
268                                               (LPDDSURFACEDESC2)pDDSD);
269 }
270
271 static HRESULT WINAPI
272 IDirectDrawSurface3Impl_Initialize(LPDIRECTDRAWSURFACE3 This, LPDIRECTDRAW pDD,
273                                    LPDDSURFACEDESC pDDSD)
274 {
275     return IDirectDrawSurface7_Initialize(CONVERT(This), pDD,
276                                           (LPDDSURFACEDESC2)pDDSD);
277 }
278
279 static HRESULT WINAPI
280 IDirectDrawSurface3Impl_IsLost(LPDIRECTDRAWSURFACE3 This)
281 {
282     return IDirectDrawSurface7_IsLost(CONVERT(This));
283 }
284
285 static HRESULT WINAPI
286 IDirectDrawSurface3Impl_Lock(LPDIRECTDRAWSURFACE3 This, LPRECT pRect,
287                              LPDDSURFACEDESC pDDSD, DWORD dwFlags, HANDLE h)
288 {
289     return IDirectDrawSurface7_Lock(CONVERT(This), pRect,
290                                     (LPDDSURFACEDESC2)pDDSD, dwFlags, h);
291 }
292
293 static HRESULT WINAPI
294 IDirectDrawSurface3Impl_ReleaseDC(LPDIRECTDRAWSURFACE3 This, HDC hDC)
295 {
296     return IDirectDrawSurface7_ReleaseDC(CONVERT(This), hDC);
297 }
298
299 static HRESULT WINAPI
300 IDirectDrawSurface3Impl_Restore(LPDIRECTDRAWSURFACE3 This)
301 {
302     return IDirectDrawSurface7_Restore(CONVERT(This));
303 }
304
305 static HRESULT WINAPI
306 IDirectDrawSurface3Impl_SetClipper(LPDIRECTDRAWSURFACE3 This,
307                                    LPDIRECTDRAWCLIPPER pClipper)
308 {
309     return IDirectDrawSurface7_SetClipper(CONVERT(This), pClipper);
310 }
311
312 static HRESULT WINAPI
313 IDirectDrawSurface3Impl_SetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags,
314                                     LPDDCOLORKEY pCKey)
315 {
316     return IDirectDrawSurface7_SetColorKey(CONVERT(This), dwFlags, pCKey);
317 }
318
319 static HRESULT WINAPI
320 IDirectDrawSurface3Impl_SetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LONG x,
321                                        LONG y)
322 {
323     return IDirectDrawSurface7_SetOverlayPosition(CONVERT(This), x, y);
324 }
325
326 static HRESULT WINAPI
327 IDirectDrawSurface3Impl_SetPalette(LPDIRECTDRAWSURFACE3 This,
328                                    LPDIRECTDRAWPALETTE pPalette)
329 {
330     return IDirectDrawSurface7_SetPalette(CONVERT(This), pPalette);
331 }
332
333 static HRESULT WINAPI
334 IDirectDrawSurface3Impl_Unlock(LPDIRECTDRAWSURFACE3 This, LPVOID data)
335 {
336     /* data might not be the LPRECT of later versions, so drop it. */
337     return IDirectDrawSurface7_Unlock(CONVERT(This), NULL);
338 }
339
340 static HRESULT WINAPI
341 IDirectDrawSurface3Impl_UpdateOverlay(LPDIRECTDRAWSURFACE3 This, LPRECT prcSrc,
342                                       LPDIRECTDRAWSURFACE3 pDstSurf,
343                                       LPRECT prcDst, DWORD dwFlags,
344                                       LPDDOVERLAYFX pFX)
345 {
346     return IDirectDrawSurface7_UpdateOverlay(CONVERT(This), prcSrc,
347                                              CONVERT(pDstSurf), prcDst,
348                                              dwFlags, pFX);
349 }
350
351 static HRESULT WINAPI
352 IDirectDrawSurface3Impl_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE3 This,
353                                              DWORD dwFlags)
354 {
355     return IDirectDrawSurface7_UpdateOverlayDisplay(CONVERT(This), dwFlags);
356 }
357
358 static HRESULT WINAPI
359 IDirectDrawSurface3Impl_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE3 This,
360                                             DWORD dwFlags,
361                                             LPDIRECTDRAWSURFACE3 pSurfReference)
362 {
363     return IDirectDrawSurface7_UpdateOverlayZOrder(CONVERT(This), dwFlags,
364                                                    CONVERT(pSurfReference));
365 }
366
367 static HRESULT WINAPI
368 IDirectDrawSurface3Impl_GetDDInterface(LPDIRECTDRAWSURFACE3 This, LPVOID* ppDD)
369 {
370     return IDirectDrawSurface7_GetDDInterface(CONVERT(This), ppDD);
371 }
372
373 static HRESULT WINAPI
374 IDirectDrawSurface3Impl_PageLock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
375 {
376     return IDirectDrawSurface7_PageLock(CONVERT(This), dwFlags);
377 }
378
379 static HRESULT WINAPI
380 IDirectDrawSurface3Impl_PageUnlock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
381 {
382     return IDirectDrawSurface7_PageUnlock(CONVERT(This), dwFlags);
383 }
384
385 static HRESULT WINAPI
386 IDirectDrawSurface3Impl_SetSurfaceDesc(LPDIRECTDRAWSURFACE3 This,
387                                        LPDDSURFACEDESC pDDSD, DWORD dwFlags)
388 {
389     return IDirectDrawSurface7_SetSurfaceDesc(CONVERT(This),
390                                               (LPDDSURFACEDESC2)pDDSD,
391                                               dwFlags);
392 }
393
394 const IDirectDrawSurface3Vtbl DDRAW_IDDS3_Thunk_VTable =
395 {
396     IDirectDrawSurface3Impl_QueryInterface,
397     IDirectDrawSurface3Impl_AddRef,
398     IDirectDrawSurface3Impl_Release,
399     IDirectDrawSurface3Impl_AddAttachedSurface,
400     IDirectDrawSurface3Impl_AddOverlayDirtyRect,
401     IDirectDrawSurface3Impl_Blt,
402     IDirectDrawSurface3Impl_BltBatch,
403     IDirectDrawSurface3Impl_BltFast,
404     IDirectDrawSurface3Impl_DeleteAttachedSurface,
405     IDirectDrawSurface3Impl_EnumAttachedSurfaces,
406     IDirectDrawSurface3Impl_EnumOverlayZOrders,
407     IDirectDrawSurface3Impl_Flip,
408     IDirectDrawSurface3Impl_GetAttachedSurface,
409     IDirectDrawSurface3Impl_GetBltStatus,
410     IDirectDrawSurface3Impl_GetCaps,
411     IDirectDrawSurface3Impl_GetClipper,
412     IDirectDrawSurface3Impl_GetColorKey,
413     IDirectDrawSurface3Impl_GetDC,
414     IDirectDrawSurface3Impl_GetFlipStatus,
415     IDirectDrawSurface3Impl_GetOverlayPosition,
416     IDirectDrawSurface3Impl_GetPalette,
417     IDirectDrawSurface3Impl_GetPixelFormat,
418     IDirectDrawSurface3Impl_GetSurfaceDesc,
419     IDirectDrawSurface3Impl_Initialize,
420     IDirectDrawSurface3Impl_IsLost,
421     IDirectDrawSurface3Impl_Lock,
422     IDirectDrawSurface3Impl_ReleaseDC,
423     IDirectDrawSurface3Impl_Restore,
424     IDirectDrawSurface3Impl_SetClipper,
425     IDirectDrawSurface3Impl_SetColorKey,
426     IDirectDrawSurface3Impl_SetOverlayPosition,
427     IDirectDrawSurface3Impl_SetPalette,
428     IDirectDrawSurface3Impl_Unlock,
429     IDirectDrawSurface3Impl_UpdateOverlay,
430     IDirectDrawSurface3Impl_UpdateOverlayDisplay,
431     IDirectDrawSurface3Impl_UpdateOverlayZOrder,
432     IDirectDrawSurface3Impl_GetDDInterface,
433     IDirectDrawSurface3Impl_PageLock,
434     IDirectDrawSurface3Impl_PageUnlock,
435     IDirectDrawSurface3Impl_SetSurfaceDesc
436 };