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
23 #include "dsurface/main.h"
24 #include "dsurface/thunks.h"
25 #include "ddcomimpl.h"
27 #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
28 IDirectDrawSurface3, \
29 IDirectDrawSurface7, \
32 #define CONVERT_REV(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
33 IDirectDrawSurface7, \
34 IDirectDrawSurface3, \
38 IDirectDrawSurface3Impl_QueryInterface(LPDIRECTDRAWSURFACE3 This, REFIID iid,
41 return IDirectDrawSurface7_QueryInterface(CONVERT(This), iid, ppObj);
45 IDirectDrawSurface3Impl_AddRef(LPDIRECTDRAWSURFACE3 This)
47 return IDirectDrawSurface7_AddRef(CONVERT(This));
51 IDirectDrawSurface3Impl_Release(LPDIRECTDRAWSURFACE3 This)
53 return IDirectDrawSurface7_Release(CONVERT(This));
57 IDirectDrawSurface3Impl_AddAttachedSurface(LPDIRECTDRAWSURFACE3 This,
58 LPDIRECTDRAWSURFACE3 pAttach)
60 return IDirectDrawSurface7_AddAttachedSurface(CONVERT(This),
65 IDirectDrawSurface3Impl_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE3 This,
68 return IDirectDrawSurface7_AddOverlayDirtyRect(CONVERT(This), pRect);
72 IDirectDrawSurface3Impl_Blt(LPDIRECTDRAWSURFACE3 This, LPRECT prcDst,
73 LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc,
74 DWORD dwFlags, LPDDBLTFX pFX)
76 return IDirectDrawSurface7_Blt(CONVERT(This), prcDst, CONVERT(pSrcSurf),
77 prcSrc, dwFlags, pFX);
81 IDirectDrawSurface3Impl_BltBatch(LPDIRECTDRAWSURFACE3 This,
82 LPDDBLTBATCH pBatch, DWORD dwCount,
85 return IDirectDrawSurface7_BltBatch(CONVERT(This), pBatch, dwCount,
90 IDirectDrawSurface3Impl_BltFast(LPDIRECTDRAWSURFACE3 This, DWORD x, DWORD y,
91 LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc,
94 return IDirectDrawSurface7_BltFast(CONVERT(This), x, y, CONVERT(pSrcSurf),
99 IDirectDrawSurface3Impl_DeleteAttachedSurface(LPDIRECTDRAWSURFACE3 This,
101 LPDIRECTDRAWSURFACE3 pAttached)
103 return IDirectDrawSurface7_DeleteAttachedSurface(CONVERT(This), dwFlags,
109 LPDDENUMSURFACESCALLBACK callback;
113 static HRESULT CALLBACK
114 EnumCallback(LPDIRECTDRAWSURFACE7 iface, LPDDSURFACEDESC2 pDDSD,
117 const struct callback_info* info = context;
120 /* This is an outgoing conversion so we have to do it. */
122 memset(&ddsd, 0, sizeof(ddsd));
123 ddsd.dwSize = sizeof(ddsd);
124 DDRAW_Convert_DDSURFACEDESC_2_To_1(pDDSD, &ddsd);
127 /* the LPDDSURFACEDESC2 -> LPDDSURFACEDESC coercion is safe, since
128 * the data format is compatible with older enum procs */
129 return info->callback((LPDIRECTDRAWSURFACE)CONVERT_REV(iface), (LPDDSURFACEDESC)pDDSD,
133 static HRESULT WINAPI
134 IDirectDrawSurface3Impl_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 This,
136 LPDDENUMSURFACESCALLBACK callback)
138 struct callback_info info = { callback, context };
139 return IDirectDrawSurface7_EnumAttachedSurfaces(CONVERT(This), &info,
143 static HRESULT WINAPI
144 IDirectDrawSurface3Impl_EnumOverlayZOrders(LPDIRECTDRAWSURFACE3 This,
145 DWORD dwFlags, LPVOID context,
146 LPDDENUMSURFACESCALLBACK callback)
148 struct callback_info info = { callback, context };
149 return IDirectDrawSurface7_EnumOverlayZOrders(CONVERT(This), dwFlags,
150 &info, EnumCallback);
153 static HRESULT WINAPI
154 IDirectDrawSurface3Impl_Flip(LPDIRECTDRAWSURFACE3 This,
155 LPDIRECTDRAWSURFACE3 pOverride, DWORD dwFlags)
157 return IDirectDrawSurface7_Flip(CONVERT(This), CONVERT(pOverride),
161 static HRESULT WINAPI
162 IDirectDrawSurface3Impl_GetAttachedSurface(LPDIRECTDRAWSURFACE3 This,
164 LPDIRECTDRAWSURFACE3* ppAttached)
166 DDSCAPS2 caps = { pCaps->dwCaps, 0, 0, 0 };
167 LPDIRECTDRAWSURFACE7 pAttached7;
170 hr = IDirectDrawSurface7_GetAttachedSurface(CONVERT(This), &caps,
172 if (FAILED(hr)) return hr;
174 *ppAttached = CONVERT_REV(pAttached7);
178 static HRESULT WINAPI
179 IDirectDrawSurface3Impl_GetBltStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
181 return IDirectDrawSurface7_GetBltStatus(CONVERT(This), dwFlags);
184 static HRESULT WINAPI
185 IDirectDrawSurface3Impl_GetCaps(LPDIRECTDRAWSURFACE3 This, LPDDSCAPS pCaps)
190 hr = IDirectDrawSurface7_GetCaps(CONVERT(This), &caps);
191 if (FAILED(hr)) return hr;
193 pCaps->dwCaps = caps.dwCaps;
197 static HRESULT WINAPI
198 IDirectDrawSurface3Impl_GetClipper(LPDIRECTDRAWSURFACE3 This,
199 LPDIRECTDRAWCLIPPER* ppClipper)
201 return IDirectDrawSurface7_GetClipper(CONVERT(This), ppClipper);
204 static HRESULT WINAPI
205 IDirectDrawSurface3Impl_GetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags,
208 return IDirectDrawSurface7_GetColorKey(CONVERT(This), dwFlags, pCKey);
211 static HRESULT WINAPI
212 IDirectDrawSurface3Impl_GetDC(LPDIRECTDRAWSURFACE3 This, HDC* phDC)
214 return IDirectDrawSurface7_GetDC(CONVERT(This), phDC);
217 static HRESULT WINAPI
218 IDirectDrawSurface3Impl_GetFlipStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
220 return IDirectDrawSurface7_GetFlipStatus(CONVERT(This), dwFlags);
223 static HRESULT WINAPI
224 IDirectDrawSurface3Impl_GetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LPLONG pX,
227 return IDirectDrawSurface7_GetOverlayPosition(CONVERT(This), pX, pY);
230 static HRESULT WINAPI
231 IDirectDrawSurface3Impl_GetPalette(LPDIRECTDRAWSURFACE3 This,
232 LPDIRECTDRAWPALETTE* ppPalette)
234 return IDirectDrawSurface7_GetPalette(CONVERT(This), ppPalette);
237 static HRESULT WINAPI
238 IDirectDrawSurface3Impl_GetPixelFormat(LPDIRECTDRAWSURFACE3 This,
239 LPDDPIXELFORMAT pPixelFormat)
241 return IDirectDrawSurface7_GetPixelFormat(CONVERT(This), pPixelFormat);
244 static HRESULT WINAPI
245 IDirectDrawSurface3Impl_GetSurfaceDesc(LPDIRECTDRAWSURFACE3 This,
246 LPDDSURFACEDESC pDDSD)
248 return IDirectDrawSurface7_GetSurfaceDesc(CONVERT(This),
249 (LPDDSURFACEDESC2)pDDSD);
252 static HRESULT WINAPI
253 IDirectDrawSurface3Impl_Initialize(LPDIRECTDRAWSURFACE3 This, LPDIRECTDRAW pDD,
254 LPDDSURFACEDESC pDDSD)
256 return IDirectDrawSurface7_Initialize(CONVERT(This), pDD,
257 (LPDDSURFACEDESC2)pDDSD);
260 static HRESULT WINAPI
261 IDirectDrawSurface3Impl_IsLost(LPDIRECTDRAWSURFACE3 This)
263 return IDirectDrawSurface7_IsLost(CONVERT(This));
266 static HRESULT WINAPI
267 IDirectDrawSurface3Impl_Lock(LPDIRECTDRAWSURFACE3 This, LPRECT pRect,
268 LPDDSURFACEDESC pDDSD, DWORD dwFlags, HANDLE h)
270 return IDirectDrawSurface7_Lock(CONVERT(This), pRect,
271 (LPDDSURFACEDESC2)pDDSD, dwFlags, h);
274 static HRESULT WINAPI
275 IDirectDrawSurface3Impl_ReleaseDC(LPDIRECTDRAWSURFACE3 This, HDC hDC)
277 return IDirectDrawSurface7_ReleaseDC(CONVERT(This), hDC);
280 static HRESULT WINAPI
281 IDirectDrawSurface3Impl_Restore(LPDIRECTDRAWSURFACE3 This)
283 return IDirectDrawSurface7_Restore(CONVERT(This));
286 static HRESULT WINAPI
287 IDirectDrawSurface3Impl_SetClipper(LPDIRECTDRAWSURFACE3 This,
288 LPDIRECTDRAWCLIPPER pClipper)
290 return IDirectDrawSurface7_SetClipper(CONVERT(This), pClipper);
293 static HRESULT WINAPI
294 IDirectDrawSurface3Impl_SetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags,
297 return IDirectDrawSurface7_SetColorKey(CONVERT(This), dwFlags, pCKey);
300 static HRESULT WINAPI
301 IDirectDrawSurface3Impl_SetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LONG x,
304 return IDirectDrawSurface7_SetOverlayPosition(CONVERT(This), x, y);
307 static HRESULT WINAPI
308 IDirectDrawSurface3Impl_SetPalette(LPDIRECTDRAWSURFACE3 This,
309 LPDIRECTDRAWPALETTE pPalette)
311 return IDirectDrawSurface7_SetPalette(CONVERT(This), pPalette);
314 static HRESULT WINAPI
315 IDirectDrawSurface3Impl_Unlock(LPDIRECTDRAWSURFACE3 This, LPVOID data)
317 /* data might not be the LPRECT of later versions, so drop it. */
318 return IDirectDrawSurface7_Unlock(CONVERT(This), NULL);
321 static HRESULT WINAPI
322 IDirectDrawSurface3Impl_UpdateOverlay(LPDIRECTDRAWSURFACE3 This, LPRECT prcSrc,
323 LPDIRECTDRAWSURFACE3 pDstSurf,
324 LPRECT prcDst, DWORD dwFlags,
327 return IDirectDrawSurface7_UpdateOverlay(CONVERT(This), prcSrc,
328 CONVERT(pDstSurf), prcDst,
332 static HRESULT WINAPI
333 IDirectDrawSurface3Impl_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE3 This,
336 return IDirectDrawSurface7_UpdateOverlayDisplay(CONVERT(This), dwFlags);
339 static HRESULT WINAPI
340 IDirectDrawSurface3Impl_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE3 This,
342 LPDIRECTDRAWSURFACE3 pSurfReference)
344 return IDirectDrawSurface7_UpdateOverlayZOrder(CONVERT(This), dwFlags,
345 CONVERT(pSurfReference));
348 static HRESULT WINAPI
349 IDirectDrawSurface3Impl_GetDDInterface(LPDIRECTDRAWSURFACE3 This, LPVOID* ppDD)
351 return IDirectDrawSurface7_GetDDInterface(CONVERT(This), ppDD);
354 static HRESULT WINAPI
355 IDirectDrawSurface3Impl_PageLock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
357 return IDirectDrawSurface7_PageLock(CONVERT(This), dwFlags);
360 static HRESULT WINAPI
361 IDirectDrawSurface3Impl_PageUnlock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags)
363 return IDirectDrawSurface7_PageUnlock(CONVERT(This), dwFlags);
366 static HRESULT WINAPI
367 IDirectDrawSurface3Impl_SetSurfaceDesc(LPDIRECTDRAWSURFACE3 This,
368 LPDDSURFACEDESC pDDSD, DWORD dwFlags)
370 return IDirectDrawSurface7_SetSurfaceDesc(CONVERT(This),
371 (LPDDSURFACEDESC2)pDDSD,
375 ICOM_VTABLE(IDirectDrawSurface3) DDRAW_IDDS3_Thunk_VTable =
377 IDirectDrawSurface3Impl_QueryInterface,
378 IDirectDrawSurface3Impl_AddRef,
379 IDirectDrawSurface3Impl_Release,
380 IDirectDrawSurface3Impl_AddAttachedSurface,
381 IDirectDrawSurface3Impl_AddOverlayDirtyRect,
382 IDirectDrawSurface3Impl_Blt,
383 IDirectDrawSurface3Impl_BltBatch,
384 IDirectDrawSurface3Impl_BltFast,
385 IDirectDrawSurface3Impl_DeleteAttachedSurface,
386 IDirectDrawSurface3Impl_EnumAttachedSurfaces,
387 IDirectDrawSurface3Impl_EnumOverlayZOrders,
388 IDirectDrawSurface3Impl_Flip,
389 IDirectDrawSurface3Impl_GetAttachedSurface,
390 IDirectDrawSurface3Impl_GetBltStatus,
391 IDirectDrawSurface3Impl_GetCaps,
392 IDirectDrawSurface3Impl_GetClipper,
393 IDirectDrawSurface3Impl_GetColorKey,
394 IDirectDrawSurface3Impl_GetDC,
395 IDirectDrawSurface3Impl_GetFlipStatus,
396 IDirectDrawSurface3Impl_GetOverlayPosition,
397 IDirectDrawSurface3Impl_GetPalette,
398 IDirectDrawSurface3Impl_GetPixelFormat,
399 IDirectDrawSurface3Impl_GetSurfaceDesc,
400 IDirectDrawSurface3Impl_Initialize,
401 IDirectDrawSurface3Impl_IsLost,
402 IDirectDrawSurface3Impl_Lock,
403 IDirectDrawSurface3Impl_ReleaseDC,
404 IDirectDrawSurface3Impl_Restore,
405 IDirectDrawSurface3Impl_SetClipper,
406 IDirectDrawSurface3Impl_SetColorKey,
407 IDirectDrawSurface3Impl_SetOverlayPosition,
408 IDirectDrawSurface3Impl_SetPalette,
409 IDirectDrawSurface3Impl_Unlock,
410 IDirectDrawSurface3Impl_UpdateOverlay,
411 IDirectDrawSurface3Impl_UpdateOverlayDisplay,
412 IDirectDrawSurface3Impl_UpdateOverlayZOrder,
413 IDirectDrawSurface3Impl_GetDDInterface,
414 IDirectDrawSurface3Impl_PageLock,
415 IDirectDrawSurface3Impl_PageUnlock,
416 IDirectDrawSurface3Impl_SetSurfaceDesc