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
30 #include "ddraw_private.h"
31 #include "ddcomimpl.h"
33 #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
34 IDirectDrawSurface3, \
35 IDirectDrawSurface7, \
38 #define CONVERT_REV(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
39 IDirectDrawSurface7, \
40 IDirectDrawSurface3, \
44 IDirectDrawSurface3Impl_QueryInterface(LPDIRECTDRAWSURFACE3 This
, REFIID iid
,
47 return IDirectDrawSurface7_QueryInterface(CONVERT(This
), iid
, ppObj
);
51 IDirectDrawSurface3Impl_AddRef(LPDIRECTDRAWSURFACE3 This
)
53 return IDirectDrawSurface7_AddRef(CONVERT(This
));
57 IDirectDrawSurface3Impl_Release(LPDIRECTDRAWSURFACE3 This
)
59 return IDirectDrawSurface7_Release(CONVERT(This
));
63 IDirectDrawSurface3Impl_AddAttachedSurface(LPDIRECTDRAWSURFACE3 This
,
64 LPDIRECTDRAWSURFACE3 pAttach
)
66 return IDirectDrawSurface7_AddAttachedSurface(CONVERT(This
),
71 IDirectDrawSurface3Impl_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE3 This
,
74 return IDirectDrawSurface7_AddOverlayDirtyRect(CONVERT(This
), pRect
);
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
);
87 IDirectDrawSurface3Impl_BltBatch(LPDIRECTDRAWSURFACE3 This
,
88 LPDDBLTBATCH pBatch
, DWORD dwCount
,
91 return IDirectDrawSurface7_BltBatch(CONVERT(This
), pBatch
, dwCount
,
96 IDirectDrawSurface3Impl_BltFast(LPDIRECTDRAWSURFACE3 This
, DWORD x
, DWORD y
,
97 LPDIRECTDRAWSURFACE3 pSrcSurf
, LPRECT prcSrc
,
100 return IDirectDrawSurface7_BltFast(CONVERT(This
), x
, y
, CONVERT(pSrcSurf
),
104 static HRESULT WINAPI
105 IDirectDrawSurface3Impl_DeleteAttachedSurface(LPDIRECTDRAWSURFACE3 This
,
107 LPDIRECTDRAWSURFACE3 pAttached
)
109 return IDirectDrawSurface7_DeleteAttachedSurface(CONVERT(This
), dwFlags
,
115 LPDDENUMSURFACESCALLBACK callback
;
119 static HRESULT CALLBACK
120 EnumCallback(LPDIRECTDRAWSURFACE7 iface
, LPDDSURFACEDESC2 pDDSD
,
123 const struct callback_info
* info
= context
;
126 /* This is an outgoing conversion so we have to do it. */
128 memset(&ddsd
, 0, sizeof(ddsd
));
129 ddsd
.dwSize
= sizeof(ddsd
);
130 DDRAW_Convert_DDSURFACEDESC_2_To_1(pDDSD
, &ddsd
);
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
,
139 static HRESULT WINAPI
140 IDirectDrawSurface3Impl_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 This
,
142 LPDDENUMSURFACESCALLBACK callback
)
144 struct callback_info info
;
146 info
.callback
= callback
;
147 info
.context
= context
;
149 return IDirectDrawSurface7_EnumAttachedSurfaces(CONVERT(This
), &info
,
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
),
175 static HRESULT WINAPI
176 IDirectDrawSurface3Impl_GetAttachedSurface(LPDIRECTDRAWSURFACE3 This
,
178 LPDIRECTDRAWSURFACE3
* ppAttached
)
181 LPDIRECTDRAWSURFACE7 pAttached7
;
184 caps
.dwCaps
= pCaps
->dwCaps
;
189 hr
= IDirectDrawSurface7_GetAttachedSurface(CONVERT(This
), &caps
,
191 if (FAILED(hr
)) return hr
;
193 *ppAttached
= CONVERT_REV(pAttached7
);
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
)
209 hr
= IDirectDrawSurface7_GetCaps(CONVERT(This
), &caps
);
210 if (FAILED(hr
)) return hr
;
212 pCaps
->dwCaps
= caps
.dwCaps
;
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
,
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
,
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
,
316 return IDirectDrawSurface7_SetColorKey(CONVERT(This
), dwFlags
, pCKey
);
319 static HRESULT WINAPI
320 IDirectDrawSurface3Impl_SetOverlayPosition(LPDIRECTDRAWSURFACE3 This
, LONG x
,
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
,
346 return IDirectDrawSurface7_UpdateOverlay(CONVERT(This
), prcSrc
,
347 CONVERT(pDstSurf
), prcDst
,
351 static HRESULT WINAPI
352 IDirectDrawSurface3Impl_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE3 This
,
355 return IDirectDrawSurface7_UpdateOverlayDisplay(CONVERT(This
), dwFlags
);
358 static HRESULT WINAPI
359 IDirectDrawSurface3Impl_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE3 This
,
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
,
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