Fix some DPA functions so they pass the new tests.
[wine/multimedia.git] / dlls / ddraw / surface_thunks.c
blobe0b33b547bd71061d15f6180e3b8309ed8ebeb98
1 /* IDirectDrawSurface3 -> IDirectDrawSurface7 thunks
2 * Copyright 2000 TransGaming Technologies Inc.
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.
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.
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
19 #include "config.h"
20 #include <stdarg.h>
22 #define CONST_VTABLE
24 #include "windef.h"
25 #include "winbase.h"
26 #include "wingdi.h"
27 #include "ddraw.h"
28 #include "winerror.h"
30 #include "ddraw_private.h"
31 #include "ddcomimpl.h"
33 #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
34 IDirectDrawSurface3, \
35 IDirectDrawSurface7, \
36 (pdds))
38 #define CONVERT_REV(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
39 IDirectDrawSurface7, \
40 IDirectDrawSurface3, \
41 (pdds))
43 static HRESULT WINAPI
44 IDirectDrawSurface3Impl_QueryInterface(LPDIRECTDRAWSURFACE3 This, REFIID iid,
45 LPVOID *ppObj)
47 return IDirectDrawSurface7_QueryInterface(CONVERT(This), iid, ppObj);
50 static ULONG WINAPI
51 IDirectDrawSurface3Impl_AddRef(LPDIRECTDRAWSURFACE3 This)
53 return IDirectDrawSurface7_AddRef(CONVERT(This));
56 static ULONG WINAPI
57 IDirectDrawSurface3Impl_Release(LPDIRECTDRAWSURFACE3 This)
59 return IDirectDrawSurface7_Release(CONVERT(This));
62 static HRESULT WINAPI
63 IDirectDrawSurface3Impl_AddAttachedSurface(LPDIRECTDRAWSURFACE3 This,
64 LPDIRECTDRAWSURFACE3 pAttach)
66 return IDirectDrawSurface7_AddAttachedSurface(CONVERT(This),
67 CONVERT(pAttach));
70 static HRESULT WINAPI
71 IDirectDrawSurface3Impl_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE3 This,
72 LPRECT pRect)
74 return IDirectDrawSurface7_AddOverlayDirtyRect(CONVERT(This), pRect);
77 static HRESULT WINAPI
78 IDirectDrawSurface3Impl_Blt(LPDIRECTDRAWSURFACE3 This, LPRECT prcDst,
79 LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc,
80 DWORD dwFlags, LPDDBLTFX pFX)
82 return IDirectDrawSurface7_Blt(CONVERT(This), prcDst, CONVERT(pSrcSurf),
83 prcSrc, dwFlags, pFX);
86 static HRESULT WINAPI
87 IDirectDrawSurface3Impl_BltBatch(LPDIRECTDRAWSURFACE3 This,
88 LPDDBLTBATCH pBatch, DWORD dwCount,
89 DWORD dwFlags)
91 return IDirectDrawSurface7_BltBatch(CONVERT(This), pBatch, dwCount,
92 dwFlags);
95 static HRESULT WINAPI
96 IDirectDrawSurface3Impl_BltFast(LPDIRECTDRAWSURFACE3 This, DWORD x, DWORD y,
97 LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc,
98 DWORD dwTrans)
100 return IDirectDrawSurface7_BltFast(CONVERT(This), x, y, CONVERT(pSrcSurf),
101 prcSrc, dwTrans);
104 static HRESULT WINAPI
105 IDirectDrawSurface3Impl_DeleteAttachedSurface(LPDIRECTDRAWSURFACE3 This,
106 DWORD dwFlags,
107 LPDIRECTDRAWSURFACE3 pAttached)
109 return IDirectDrawSurface7_DeleteAttachedSurface(CONVERT(This), dwFlags,
110 CONVERT(pAttached));
113 struct callback_info
115 LPDDENUMSURFACESCALLBACK callback;
116 LPVOID context;
119 static HRESULT CALLBACK
120 EnumCallback(LPDIRECTDRAWSURFACE7 iface, LPDDSURFACEDESC2 pDDSD,
121 LPVOID context)
123 const struct callback_info* info = context;
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
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);
139 static HRESULT WINAPI
140 IDirectDrawSurface3Impl_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 This,
141 LPVOID context,
142 LPDDENUMSURFACESCALLBACK callback)
144 struct callback_info info;
146 info.callback = callback;
147 info.context = context;
149 return IDirectDrawSurface7_EnumAttachedSurfaces(CONVERT(This), &info,
150 EnumCallback);
153 static HRESULT WINAPI
154 IDirectDrawSurface3Impl_EnumOverlayZOrders(LPDIRECTDRAWSURFACE3 This,
155 DWORD dwFlags, LPVOID context,
156 LPDDENUMSURFACESCALLBACK callback)
158 struct callback_info info;
160 info.callback = callback;
161 info.context = context;
163 return IDirectDrawSurface7_EnumOverlayZOrders(CONVERT(This), dwFlags,
164 &info, EnumCallback);
167 static HRESULT WINAPI
168 IDirectDrawSurface3Impl_Flip(LPDIRECTDRAWSURFACE3 This,
169 LPDIRECTDRAWSURFACE3 pOverride, DWORD dwFlags)
171 return IDirectDrawSurface7_Flip(CONVERT(This), CONVERT(pOverride),
172 dwFlags);
175 static HRESULT WINAPI
176 IDirectDrawSurface3Impl_GetAttachedSurface(LPDIRECTDRAWSURFACE3 This,
177 LPDDSCAPS pCaps,
178 LPDIRECTDRAWSURFACE3* ppAttached)
180 DDSCAPS2 caps;
181 LPDIRECTDRAWSURFACE7 pAttached7;
182 HRESULT hr;
184 caps.dwCaps = pCaps->dwCaps;
185 caps.dwCaps2 = 0;
186 caps.dwCaps3 = 0;
187 caps.dwCaps4 = 0;
189 hr = IDirectDrawSurface7_GetAttachedSurface(CONVERT(This), &caps,
190 &pAttached7);
191 if (FAILED(hr)) return hr;
193 *ppAttached = CONVERT_REV(pAttached7);
194 return hr;
197 static HRESULT WINAPI
198 IDirectDrawSurface3Impl_GetBltStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
200 return IDirectDrawSurface7_GetBltStatus(CONVERT(This), dwFlags);
203 static HRESULT WINAPI
204 IDirectDrawSurface3Impl_GetCaps(LPDIRECTDRAWSURFACE3 This, LPDDSCAPS pCaps)
206 DDSCAPS2 caps;
207 HRESULT hr;
209 hr = IDirectDrawSurface7_GetCaps(CONVERT(This), &caps);
210 if (FAILED(hr)) return hr;
212 pCaps->dwCaps = caps.dwCaps;
213 return hr;
216 static HRESULT WINAPI
217 IDirectDrawSurface3Impl_GetClipper(LPDIRECTDRAWSURFACE3 This,
218 LPDIRECTDRAWCLIPPER* ppClipper)
220 return IDirectDrawSurface7_GetClipper(CONVERT(This), ppClipper);
223 static HRESULT WINAPI
224 IDirectDrawSurface3Impl_GetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags,
225 LPDDCOLORKEY pCKey)
227 return IDirectDrawSurface7_GetColorKey(CONVERT(This), dwFlags, pCKey);
230 static HRESULT WINAPI
231 IDirectDrawSurface3Impl_GetDC(LPDIRECTDRAWSURFACE3 This, HDC* phDC)
233 return IDirectDrawSurface7_GetDC(CONVERT(This), phDC);
236 static HRESULT WINAPI
237 IDirectDrawSurface3Impl_GetFlipStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
239 return IDirectDrawSurface7_GetFlipStatus(CONVERT(This), dwFlags);
242 static HRESULT WINAPI
243 IDirectDrawSurface3Impl_GetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LPLONG pX,
244 LPLONG pY)
246 return IDirectDrawSurface7_GetOverlayPosition(CONVERT(This), pX, pY);
249 static HRESULT WINAPI
250 IDirectDrawSurface3Impl_GetPalette(LPDIRECTDRAWSURFACE3 This,
251 LPDIRECTDRAWPALETTE* ppPalette)
253 return IDirectDrawSurface7_GetPalette(CONVERT(This), ppPalette);
256 static HRESULT WINAPI
257 IDirectDrawSurface3Impl_GetPixelFormat(LPDIRECTDRAWSURFACE3 This,
258 LPDDPIXELFORMAT pPixelFormat)
260 return IDirectDrawSurface7_GetPixelFormat(CONVERT(This), pPixelFormat);
263 static HRESULT WINAPI
264 IDirectDrawSurface3Impl_GetSurfaceDesc(LPDIRECTDRAWSURFACE3 This,
265 LPDDSURFACEDESC pDDSD)
267 return IDirectDrawSurface7_GetSurfaceDesc(CONVERT(This),
268 (LPDDSURFACEDESC2)pDDSD);
271 static HRESULT WINAPI
272 IDirectDrawSurface3Impl_Initialize(LPDIRECTDRAWSURFACE3 This, LPDIRECTDRAW pDD,
273 LPDDSURFACEDESC pDDSD)
275 return IDirectDrawSurface7_Initialize(CONVERT(This), pDD,
276 (LPDDSURFACEDESC2)pDDSD);
279 static HRESULT WINAPI
280 IDirectDrawSurface3Impl_IsLost(LPDIRECTDRAWSURFACE3 This)
282 return IDirectDrawSurface7_IsLost(CONVERT(This));
285 static HRESULT WINAPI
286 IDirectDrawSurface3Impl_Lock(LPDIRECTDRAWSURFACE3 This, LPRECT pRect,
287 LPDDSURFACEDESC pDDSD, DWORD dwFlags, HANDLE h)
289 return IDirectDrawSurface7_Lock(CONVERT(This), pRect,
290 (LPDDSURFACEDESC2)pDDSD, dwFlags, h);
293 static HRESULT WINAPI
294 IDirectDrawSurface3Impl_ReleaseDC(LPDIRECTDRAWSURFACE3 This, HDC hDC)
296 return IDirectDrawSurface7_ReleaseDC(CONVERT(This), hDC);
299 static HRESULT WINAPI
300 IDirectDrawSurface3Impl_Restore(LPDIRECTDRAWSURFACE3 This)
302 return IDirectDrawSurface7_Restore(CONVERT(This));
305 static HRESULT WINAPI
306 IDirectDrawSurface3Impl_SetClipper(LPDIRECTDRAWSURFACE3 This,
307 LPDIRECTDRAWCLIPPER pClipper)
309 return IDirectDrawSurface7_SetClipper(CONVERT(This), pClipper);
312 static HRESULT WINAPI
313 IDirectDrawSurface3Impl_SetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags,
314 LPDDCOLORKEY pCKey)
316 return IDirectDrawSurface7_SetColorKey(CONVERT(This), dwFlags, pCKey);
319 static HRESULT WINAPI
320 IDirectDrawSurface3Impl_SetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LONG x,
321 LONG y)
323 return IDirectDrawSurface7_SetOverlayPosition(CONVERT(This), x, y);
326 static HRESULT WINAPI
327 IDirectDrawSurface3Impl_SetPalette(LPDIRECTDRAWSURFACE3 This,
328 LPDIRECTDRAWPALETTE pPalette)
330 return IDirectDrawSurface7_SetPalette(CONVERT(This), pPalette);
333 static HRESULT WINAPI
334 IDirectDrawSurface3Impl_Unlock(LPDIRECTDRAWSURFACE3 This, LPVOID data)
336 /* data might not be the LPRECT of later versions, so drop it. */
337 return IDirectDrawSurface7_Unlock(CONVERT(This), NULL);
340 static HRESULT WINAPI
341 IDirectDrawSurface3Impl_UpdateOverlay(LPDIRECTDRAWSURFACE3 This, LPRECT prcSrc,
342 LPDIRECTDRAWSURFACE3 pDstSurf,
343 LPRECT prcDst, DWORD dwFlags,
344 LPDDOVERLAYFX pFX)
346 return IDirectDrawSurface7_UpdateOverlay(CONVERT(This), prcSrc,
347 CONVERT(pDstSurf), prcDst,
348 dwFlags, pFX);
351 static HRESULT WINAPI
352 IDirectDrawSurface3Impl_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE3 This,
353 DWORD dwFlags)
355 return IDirectDrawSurface7_UpdateOverlayDisplay(CONVERT(This), dwFlags);
358 static HRESULT WINAPI
359 IDirectDrawSurface3Impl_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE3 This,
360 DWORD dwFlags,
361 LPDIRECTDRAWSURFACE3 pSurfReference)
363 return IDirectDrawSurface7_UpdateOverlayZOrder(CONVERT(This), dwFlags,
364 CONVERT(pSurfReference));
367 static HRESULT WINAPI
368 IDirectDrawSurface3Impl_GetDDInterface(LPDIRECTDRAWSURFACE3 This, LPVOID* ppDD)
370 return IDirectDrawSurface7_GetDDInterface(CONVERT(This), ppDD);
373 static HRESULT WINAPI
374 IDirectDrawSurface3Impl_PageLock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
376 return IDirectDrawSurface7_PageLock(CONVERT(This), dwFlags);
379 static HRESULT WINAPI
380 IDirectDrawSurface3Impl_PageUnlock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
382 return IDirectDrawSurface7_PageUnlock(CONVERT(This), dwFlags);
385 static HRESULT WINAPI
386 IDirectDrawSurface3Impl_SetSurfaceDesc(LPDIRECTDRAWSURFACE3 This,
387 LPDDSURFACEDESC pDDSD, DWORD dwFlags)
389 return IDirectDrawSurface7_SetSurfaceDesc(CONVERT(This),
390 (LPDDSURFACEDESC2)pDDSD,
391 dwFlags);
394 const IDirectDrawSurface3Vtbl DDRAW_IDDS3_Thunk_VTable =
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