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