ntdll: Add a test for NtNotifyChangeDirectoryFile.
[wine/multimedia.git] / dlls / ddraw / ddraw_thunks.c
blobebb5389b3dcb31f8cb4ae43d80280d2c53a9c8b7
1 /* Direct Draw Thunks and old vtables
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
18 #include <stdarg.h>
20 #include "windef.h"
21 #include "winbase.h"
22 #include "wingdi.h"
23 #include "ddraw.h"
24 #include "ddraw_private.h"
25 #include "ddcomimpl.h"
27 static HRESULT WINAPI
28 IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj)
30 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
31 IDirectDraw,
32 IDirectDraw7, This),
33 iid, ppObj);
36 static HRESULT WINAPI
37 IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj)
39 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
40 IDirectDraw2,
41 IDirectDraw7, This),
42 iid, ppObj);
46 static HRESULT WINAPI
47 IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj)
49 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
50 IDirectDraw4,
51 IDirectDraw7, This),
52 iid, ppObj);
55 static ULONG WINAPI
56 IDirectDrawImpl_AddRef(LPDIRECTDRAW This)
58 return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,
59 IDirectDraw, IDirectDraw7,
60 This));
63 static ULONG WINAPI
64 IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 This)
66 return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,
67 IDirectDraw2, IDirectDraw7,
68 This));
71 static ULONG WINAPI
72 IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 This)
74 return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,
75 IDirectDraw4, IDirectDraw7,
76 This));
79 static ULONG WINAPI
80 IDirectDrawImpl_Release(LPDIRECTDRAW This)
82 return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
83 IDirectDraw, IDirectDraw7,
84 This));
87 static ULONG WINAPI
88 IDirectDraw2Impl_Release(LPDIRECTDRAW2 This)
90 return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
91 IDirectDraw2, IDirectDraw7,
92 This));
95 static ULONG WINAPI
96 IDirectDraw4Impl_Release(LPDIRECTDRAW4 This)
98 return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
99 IDirectDraw4, IDirectDraw7,
100 This));
103 static HRESULT WINAPI
104 IDirectDrawImpl_Compact(LPDIRECTDRAW This)
106 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
107 IDirectDraw, IDirectDraw7,
108 This));
111 static HRESULT WINAPI
112 IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This)
114 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
115 IDirectDraw2, IDirectDraw7,
116 This));
119 static HRESULT WINAPI
120 IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This)
122 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
123 IDirectDraw4, IDirectDraw7,
124 This));
127 static HRESULT WINAPI
128 IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags,
129 LPDIRECTDRAWCLIPPER *ppClipper,
130 IUnknown *pUnkOuter)
132 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
133 IDirectDraw,
134 IDirectDraw7,
135 This),
136 dwFlags, ppClipper, pUnkOuter);
139 static HRESULT WINAPI
140 IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags,
141 LPDIRECTDRAWCLIPPER *ppClipper,
142 IUnknown *pUnkOuter)
144 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
145 IDirectDraw2,
146 IDirectDraw7,
147 This),
148 dwFlags, ppClipper, pUnkOuter);
151 static HRESULT WINAPI
152 IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags,
153 LPDIRECTDRAWCLIPPER *ppClipper,
154 IUnknown *pUnkOuter)
156 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
157 IDirectDraw4,
158 IDirectDraw7,
159 This),
160 dwFlags, ppClipper, pUnkOuter);
163 static HRESULT WINAPI
164 IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags,
165 LPPALETTEENTRY pEntries,
166 LPDIRECTDRAWPALETTE *ppPalette,
167 IUnknown *pUnkOuter)
169 return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
170 IDirectDraw,
171 IDirectDraw7,
172 This),
173 dwFlags, pEntries, ppPalette, pUnkOuter);
176 static HRESULT WINAPI
177 IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags,
178 LPPALETTEENTRY pEntries,
179 LPDIRECTDRAWPALETTE *ppPalette,
180 IUnknown *pUnkOuter)
182 return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
183 IDirectDraw2,
184 IDirectDraw7,
185 This),
186 dwFlags, pEntries, ppPalette, pUnkOuter);
189 static HRESULT WINAPI
190 IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags,
191 LPPALETTEENTRY pEntries,
192 LPDIRECTDRAWPALETTE *ppPalette,
193 IUnknown *pUnkOuter)
195 return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
196 IDirectDraw4,
197 IDirectDraw7,
198 This),
199 dwFlags, pEntries, ppPalette, pUnkOuter);
202 static HRESULT WINAPI
203 IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc,
204 LPDIRECTDRAWSURFACE *ppSurface,
205 IUnknown *pUnkOuter)
207 LPDIRECTDRAWSURFACE7 pSurface7;
208 HRESULT hr;
210 /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
211 * since the data layout is the same */
212 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
213 IDirectDraw,
214 IDirectDraw7,
215 This),
216 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
218 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
219 * IDirectDrawSurface vtable layout at the beginning */
220 *ppSurface = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
221 IDirectDrawSurface7, IDirectDrawSurface3,
222 pSurface7);
224 return hr;
227 static HRESULT WINAPI
228 IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc,
229 LPDIRECTDRAWSURFACE *ppSurface,
230 IUnknown *pUnkOuter)
232 LPDIRECTDRAWSURFACE7 pSurface7;
233 HRESULT hr;
235 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
236 IDirectDraw2,
237 IDirectDraw7,
238 This),
239 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
241 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
242 * IDirectDrawSurface vtable layout at the beginning */
243 *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
244 IDirectDrawSurface7, IDirectDrawSurface3,
245 pSurface7);
247 return hr;
250 static HRESULT WINAPI
251 IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc,
252 LPDIRECTDRAWSURFACE4 *ppSurface,
253 IUnknown *pUnkOuter)
255 return IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
256 IDirectDraw4,
257 IDirectDraw7,
258 This),
259 pSDesc,
260 (LPDIRECTDRAWSURFACE7 *)ppSurface,
261 pUnkOuter);
264 static HRESULT WINAPI
265 IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc,
266 LPDIRECTDRAWSURFACE *ppDst)
268 LPDIRECTDRAWSURFACE7 pDst7;
269 HRESULT hr;
271 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
272 IDirectDraw,
273 IDirectDraw7, This),
274 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
275 IDirectDrawSurface3,
276 IDirectDrawSurface7,
277 pSrc),
278 &pDst7);
280 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
281 * IDirectDrawSurface vtable layout at the beginning */
282 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
283 IDirectDrawSurface3, pDst7);
285 return hr;
288 static HRESULT WINAPI
289 IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc,
290 LPDIRECTDRAWSURFACE *ppDst)
292 LPDIRECTDRAWSURFACE7 pDst7;
293 HRESULT hr;
295 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
296 IDirectDraw2,
297 IDirectDraw7, This),
298 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
299 IDirectDrawSurface3,
300 IDirectDrawSurface7,
301 pSrc),
302 &pDst7);
304 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
305 * IDirectDrawSurface vtable layout at the beginning */
306 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
307 IDirectDrawSurface3, pDst7);
309 return hr;
312 static HRESULT WINAPI
313 IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This,
314 LPDIRECTDRAWSURFACE4 pSrc,
315 LPDIRECTDRAWSURFACE4 *ppDst)
317 return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
318 IDirectDraw4,
319 IDirectDraw7,
320 This),
321 (LPDIRECTDRAWSURFACE7)pSrc,
322 (LPDIRECTDRAWSURFACE7 *)ppDst);
325 struct displaymodescallback_context
327 LPDDENUMMODESCALLBACK func;
328 LPVOID context;
331 static HRESULT CALLBACK
332 EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context)
334 DDSURFACEDESC DDSD;
335 struct displaymodescallback_context *cbcontext = context;
337 memcpy(&DDSD,pDDSD2,sizeof(DDSD));
338 DDSD.dwSize = sizeof(DDSD);
340 return cbcontext->func(&DDSD, cbcontext->context);
343 static HRESULT WINAPI
344 IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags,
345 LPDDSURFACEDESC pDDSD, LPVOID context,
346 LPDDENUMMODESCALLBACK cb)
348 struct displaymodescallback_context cbcontext;
350 cbcontext.func = cb;
351 cbcontext.context = context;
353 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
354 IDirectDraw,
355 IDirectDraw7,
356 This),
357 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
358 EnumDisplayModesCallbackThunk);
361 static HRESULT WINAPI
362 IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This, DWORD dwFlags,
363 LPDDSURFACEDESC pDDSD, LPVOID context,
364 LPDDENUMMODESCALLBACK cb)
366 struct displaymodescallback_context cbcontext;
368 cbcontext.func = cb;
369 cbcontext.context = context;
371 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
372 IDirectDraw2,
373 IDirectDraw7,
374 This),
375 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
376 EnumDisplayModesCallbackThunk);
379 static HRESULT WINAPI
380 IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This, DWORD dwFlags,
381 LPDDSURFACEDESC2 pDDSD, LPVOID context,
382 LPDDENUMMODESCALLBACK2 cb)
384 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
385 IDirectDraw4,
386 IDirectDraw7,
387 This),
388 dwFlags, pDDSD, context, cb);
391 struct surfacescallback_context
393 LPDDENUMSURFACESCALLBACK func;
394 LPVOID context;
397 static HRESULT CALLBACK
398 EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf, LPDDSURFACEDESC2 pDDSD,
399 LPVOID context)
401 struct surfacescallback_context *cbcontext = context;
403 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
404 * IDirectDrawSurface vtable layout at the beginning */
405 return cbcontext->func((LPDIRECTDRAWSURFACE)
406 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
407 IDirectDrawSurface7,
408 IDirectDrawSurface3, pSurf),
409 (LPDDSURFACEDESC)pDDSD, cbcontext->context);
412 static HRESULT WINAPI
413 IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This, DWORD dwFlags,
414 LPDDSURFACEDESC pDDSD, LPVOID context,
415 LPDDENUMSURFACESCALLBACK cb)
417 struct surfacescallback_context cbcontext;
419 cbcontext.func = cb;
420 cbcontext.context = context;
422 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
423 IDirectDraw,
424 IDirectDraw7, This),
425 dwFlags, (LPDDSURFACEDESC2)pDDSD,
426 &cbcontext, EnumSurfacesCallbackThunk);
429 static HRESULT WINAPI
430 IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This, DWORD dwFlags,
431 LPDDSURFACEDESC pDDSD, LPVOID context,
432 LPDDENUMSURFACESCALLBACK cb)
434 struct surfacescallback_context cbcontext;
436 cbcontext.func = cb;
437 cbcontext.context = context;
439 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
440 IDirectDraw2,
441 IDirectDraw7, This),
442 dwFlags, (LPDDSURFACEDESC2)pDDSD,
443 &cbcontext, EnumSurfacesCallbackThunk);
446 static HRESULT WINAPI
447 IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This, DWORD dwFlags,
448 LPDDSURFACEDESC2 pDDSD, LPVOID context,
449 LPDDENUMSURFACESCALLBACK2 cb)
451 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
452 IDirectDraw4,
453 IDirectDraw7, This),
454 dwFlags, pDDSD, context,
455 (LPDDENUMSURFACESCALLBACK7)cb);
458 static HRESULT WINAPI
459 IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This)
461 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
462 IDirectDraw,
463 IDirectDraw7,
464 This));
467 static HRESULT WINAPI
468 IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This)
470 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
471 IDirectDraw2,
472 IDirectDraw7,
473 This));
476 static HRESULT WINAPI
477 IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This)
479 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
480 IDirectDraw4,
481 IDirectDraw7,
482 This));
485 static HRESULT WINAPI
486 IDirectDrawImpl_GetCaps(LPDIRECTDRAW This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
488 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
489 IDirectDraw, IDirectDraw7,
490 This), pDDC1, pDDC2);
493 static HRESULT WINAPI
494 IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
496 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
497 IDirectDraw2, IDirectDraw7,
498 This), pDDC1, pDDC2);
501 static HRESULT WINAPI
502 IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
504 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
505 IDirectDraw4, IDirectDraw7,
506 This), pDDC1, pDDC2);
509 static HRESULT WINAPI
510 IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This, LPDDSURFACEDESC pDDSD)
512 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
513 IDirectDraw,
514 IDirectDraw7, This),
515 (LPDDSURFACEDESC2)pDDSD);
518 static HRESULT WINAPI
519 IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This, LPDDSURFACEDESC pDDSD)
521 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
522 IDirectDraw2,
523 IDirectDraw7, This),
524 (LPDDSURFACEDESC2)pDDSD);
527 static HRESULT WINAPI
528 IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pDDSD)
530 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
531 IDirectDraw4,
532 IDirectDraw7, This),
533 pDDSD);
536 static HRESULT WINAPI
537 IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This, LPDWORD lpNumCodes,
538 LPDWORD lpCodes)
540 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
541 IDirectDraw,
542 IDirectDraw7,
543 This),
544 lpNumCodes, lpCodes);
547 static HRESULT WINAPI
548 IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This, LPDWORD lpNumCodes,
549 LPDWORD lpCodes)
551 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
552 IDirectDraw2,
553 IDirectDraw7,
554 This),
555 lpNumCodes, lpCodes);
558 static HRESULT WINAPI
559 IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This, LPDWORD lpNumCodes,
560 LPDWORD lpCodes)
562 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
563 IDirectDraw4,
564 IDirectDraw7,
565 This),
566 lpNumCodes, lpCodes);
569 static HRESULT WINAPI
570 IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE *ppSurf)
572 LPDIRECTDRAWSURFACE7 pSurf7;
573 HRESULT hr;
575 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
576 IDirectDraw,
577 IDirectDraw7,
578 This), &pSurf7);
580 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
581 * IDirectDrawSurface vtable layout at the beginning */
582 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
583 IDirectDrawSurface3, pSurf7);
585 return hr;
588 static HRESULT WINAPI
589 IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE *ppSurf)
591 LPDIRECTDRAWSURFACE7 pSurf7;
592 HRESULT hr;
594 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
595 IDirectDraw2,
596 IDirectDraw7,
597 This), &pSurf7);
599 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
600 * IDirectDrawSurface vtable layout at the beginning */
601 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
602 IDirectDrawSurface3, pSurf7);
604 return hr;
607 static HRESULT WINAPI
608 IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This,
609 LPDIRECTDRAWSURFACE4 *ppSurf)
611 return IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
612 IDirectDraw4,
613 IDirectDraw7,
614 This),
615 (LPDIRECTDRAWSURFACE7 *)ppSurf);
618 static HRESULT WINAPI
619 IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This, LPDWORD pdwFreq)
621 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
622 IDirectDraw,
623 IDirectDraw7,
624 This),
625 pdwFreq);
628 static HRESULT WINAPI
629 IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This, LPDWORD pdwFreq)
631 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
632 IDirectDraw2,
633 IDirectDraw7,
634 This),
635 pdwFreq);
638 static HRESULT WINAPI
639 IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This, LPDWORD pdwFreq)
641 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
642 IDirectDraw4,
643 IDirectDraw7,
644 This),
645 pdwFreq);
648 static HRESULT WINAPI
649 IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This, LPDWORD pdwLine)
651 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
652 IDirectDraw,
653 IDirectDraw7,
654 This), pdwLine);
657 static HRESULT WINAPI
658 IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This, LPDWORD pdwLine)
660 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
661 IDirectDraw2,
662 IDirectDraw7,
663 This), pdwLine);
666 static HRESULT WINAPI
667 IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This, LPDWORD pdwLine)
669 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
670 IDirectDraw4,
671 IDirectDraw7,
672 This), pdwLine);
675 static HRESULT WINAPI
676 IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This, LPBOOL lpbIsInVB)
678 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
679 IDirectDraw,
680 IDirectDraw7,
681 This),
682 lpbIsInVB);
685 static HRESULT WINAPI
686 IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This, LPBOOL lpbIsInVB)
688 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
689 IDirectDraw2,
690 IDirectDraw7,
691 This),
692 lpbIsInVB);
695 static HRESULT WINAPI
696 IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This, LPBOOL lpbIsInVB)
698 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
699 IDirectDraw4,
700 IDirectDraw7,
701 This),
702 lpbIsInVB);
705 static HRESULT WINAPI
706 IDirectDrawImpl_Initialize(LPDIRECTDRAW iface, LPGUID pGUID)
708 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
709 HRESULT ret_value;
711 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
713 /* Overwrite the falsely set 'DIRECTDRAW7' flag */
714 This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7;
716 return ret_value;
719 static HRESULT WINAPI
720 IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, LPGUID pGUID)
722 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
723 HRESULT ret_value;
725 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
727 /* Overwrite the falsely set 'DIRECTDRAW7' flag */
728 This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7;
730 return ret_value;
733 static HRESULT WINAPI
734 IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface, LPGUID pGUID)
736 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
737 HRESULT ret_value;
739 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
741 /* Overwrite the falsely set 'DIRECTDRAW7' flag */
742 This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7;
744 return ret_value;
748 static HRESULT WINAPI
749 IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This)
751 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
752 IDirectDraw,
753 IDirectDraw7,
754 This));
757 static HRESULT WINAPI
758 IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This)
760 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
761 IDirectDraw2,
762 IDirectDraw7,
763 This));
766 static HRESULT WINAPI
767 IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This)
769 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
770 IDirectDraw4,
771 IDirectDraw7,
772 This));
775 static HRESULT WINAPI
776 IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This, HWND hWnd,
777 DWORD dwFlags)
779 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
780 IDirectDraw,
781 IDirectDraw7,
782 This),
783 hWnd, dwFlags);
786 static HRESULT WINAPI
787 IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This, HWND hWnd,
788 DWORD dwFlags)
790 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
791 IDirectDraw2,
792 IDirectDraw7,
793 This),
794 hWnd, dwFlags);
797 static HRESULT WINAPI
798 IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This, HWND hWnd,
799 DWORD dwFlags)
801 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
802 IDirectDraw4,
803 IDirectDraw7,
804 This),
805 hWnd, dwFlags);
808 static HRESULT WINAPI
809 IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This, DWORD a, DWORD b, DWORD c)
811 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
812 IDirectDraw,
813 IDirectDraw7,
814 This),
815 a, b, c, 0, 0);
818 static HRESULT WINAPI
819 IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This, DWORD a, DWORD b, DWORD c,
820 DWORD d, DWORD e)
822 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
823 IDirectDraw2,
824 IDirectDraw7,
825 This),
826 a, b, c, d, e);
829 static HRESULT WINAPI
830 IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This, DWORD a, DWORD b, DWORD c,
831 DWORD d, DWORD e)
833 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
834 IDirectDraw4,
835 IDirectDraw7,
836 This),
837 a, b, c, d, e);
840 static HRESULT WINAPI
841 IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This, DWORD dwFlags,
842 HANDLE hEvent)
844 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
845 IDirectDraw,
846 IDirectDraw7,
847 This),
848 dwFlags, hEvent);
851 static HRESULT WINAPI
852 IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This, DWORD dwFlags,
853 HANDLE hEvent)
855 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
856 IDirectDraw2,
857 IDirectDraw7,
858 This),
859 dwFlags, hEvent);
862 static HRESULT WINAPI
863 IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This, DWORD dwFlags,
864 HANDLE hEvent)
866 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
867 IDirectDraw4,
868 IDirectDraw7,
869 This),
870 dwFlags, hEvent);
873 static HRESULT WINAPI
874 IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This, LPDDSCAPS pCaps,
875 LPDWORD pdwTotal, LPDWORD pdwFree)
877 DDSCAPS2 Caps2;
878 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
880 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
881 IDirectDraw2,
882 IDirectDraw7,
883 This),
884 &Caps2, pdwTotal, pdwFree);
887 static HRESULT WINAPI
888 IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This, LPDDSCAPS2 pCaps,
889 LPDWORD pdwTotal, LPDWORD pdwFree)
891 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
892 IDirectDraw4,
893 IDirectDraw7,
894 This),
895 pCaps, pdwTotal, pdwFree);
898 static HRESULT WINAPI
899 IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This, HDC hDC,
900 LPDIRECTDRAWSURFACE4 *pSurf)
902 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl,
903 IDirectDraw4,
904 IDirectDraw7,
905 This),
906 hDC, (LPDIRECTDRAWSURFACE7 *)pSurf);
909 static HRESULT WINAPI
910 IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This)
912 return IDirectDraw7_RestoreAllSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
913 IDirectDraw4,
914 IDirectDraw7,
915 This));
918 static HRESULT WINAPI
919 IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This)
921 return IDirectDraw7_TestCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
922 IDirectDraw4,
923 IDirectDraw7,
924 This));
927 static HRESULT WINAPI
928 IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This,
929 LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags)
931 DDDEVICEIDENTIFIER2 DDDI2;
932 HRESULT hr;
934 hr = IDirectDraw7_GetDeviceIdentifier(COM_INTERFACE_CAST(IDirectDrawImpl,
935 IDirectDraw4,
936 IDirectDraw7,
937 This),
938 &DDDI2, dwFlags);
940 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2, pDDDI);
942 return hr;
945 const IDirectDrawVtbl DDRAW_IDirectDraw_VTable =
947 IDirectDrawImpl_QueryInterface,
948 IDirectDrawImpl_AddRef,
949 IDirectDrawImpl_Release,
950 IDirectDrawImpl_Compact,
951 IDirectDrawImpl_CreateClipper,
952 IDirectDrawImpl_CreatePalette,
953 IDirectDrawImpl_CreateSurface,
954 IDirectDrawImpl_DuplicateSurface,
955 IDirectDrawImpl_EnumDisplayModes,
956 IDirectDrawImpl_EnumSurfaces,
957 IDirectDrawImpl_FlipToGDISurface,
958 IDirectDrawImpl_GetCaps,
959 IDirectDrawImpl_GetDisplayMode,
960 IDirectDrawImpl_GetFourCCCodes,
961 IDirectDrawImpl_GetGDISurface,
962 IDirectDrawImpl_GetMonitorFrequency,
963 IDirectDrawImpl_GetScanLine,
964 IDirectDrawImpl_GetVerticalBlankStatus,
965 IDirectDrawImpl_Initialize,
966 IDirectDrawImpl_RestoreDisplayMode,
967 IDirectDrawImpl_SetCooperativeLevel,
968 IDirectDrawImpl_SetDisplayMode,
969 IDirectDrawImpl_WaitForVerticalBlank,
972 const IDirectDraw2Vtbl DDRAW_IDirectDraw2_VTable =
974 IDirectDraw2Impl_QueryInterface,
975 IDirectDraw2Impl_AddRef,
976 IDirectDraw2Impl_Release,
977 IDirectDraw2Impl_Compact,
978 IDirectDraw2Impl_CreateClipper,
979 IDirectDraw2Impl_CreatePalette,
980 IDirectDraw2Impl_CreateSurface,
981 IDirectDraw2Impl_DuplicateSurface,
982 IDirectDraw2Impl_EnumDisplayModes,
983 IDirectDraw2Impl_EnumSurfaces,
984 IDirectDraw2Impl_FlipToGDISurface,
985 IDirectDraw2Impl_GetCaps,
986 IDirectDraw2Impl_GetDisplayMode,
987 IDirectDraw2Impl_GetFourCCCodes,
988 IDirectDraw2Impl_GetGDISurface,
989 IDirectDraw2Impl_GetMonitorFrequency,
990 IDirectDraw2Impl_GetScanLine,
991 IDirectDraw2Impl_GetVerticalBlankStatus,
992 IDirectDraw2Impl_Initialize,
993 IDirectDraw2Impl_RestoreDisplayMode,
994 IDirectDraw2Impl_SetCooperativeLevel,
995 IDirectDraw2Impl_SetDisplayMode,
996 IDirectDraw2Impl_WaitForVerticalBlank,
997 IDirectDraw2Impl_GetAvailableVidMem
1000 const IDirectDraw4Vtbl DDRAW_IDirectDraw4_VTable =
1002 IDirectDraw4Impl_QueryInterface,
1003 IDirectDraw4Impl_AddRef,
1004 IDirectDraw4Impl_Release,
1005 IDirectDraw4Impl_Compact,
1006 IDirectDraw4Impl_CreateClipper,
1007 IDirectDraw4Impl_CreatePalette,
1008 IDirectDraw4Impl_CreateSurface,
1009 IDirectDraw4Impl_DuplicateSurface,
1010 IDirectDraw4Impl_EnumDisplayModes,
1011 IDirectDraw4Impl_EnumSurfaces,
1012 IDirectDraw4Impl_FlipToGDISurface,
1013 IDirectDraw4Impl_GetCaps,
1014 IDirectDraw4Impl_GetDisplayMode,
1015 IDirectDraw4Impl_GetFourCCCodes,
1016 IDirectDraw4Impl_GetGDISurface,
1017 IDirectDraw4Impl_GetMonitorFrequency,
1018 IDirectDraw4Impl_GetScanLine,
1019 IDirectDraw4Impl_GetVerticalBlankStatus,
1020 IDirectDraw4Impl_Initialize,
1021 IDirectDraw4Impl_RestoreDisplayMode,
1022 IDirectDraw4Impl_SetCooperativeLevel,
1023 IDirectDraw4Impl_SetDisplayMode,
1024 IDirectDraw4Impl_WaitForVerticalBlank,
1025 IDirectDraw4Impl_GetAvailableVidMem,
1026 IDirectDraw4Impl_GetSurfaceFromDC,
1027 IDirectDraw4Impl_RestoreAllSurfaces,
1028 IDirectDraw4Impl_TestCooperativeLevel,
1029 IDirectDraw4Impl_GetDeviceIdentifier