📄 ddraw_thunk.c
字号:
/* Direct Draw Thunks and old vtables
* Copyright 2000 TransGaming Technologies Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Taken form wine (wine/dlls/ddraw/ddraw_thunks.c rev 1.2)
* with some little changes
*
*/
#include "winedraw.h"
static HRESULT WINAPI
IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj)
{
return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw,
IDirectDraw7, This),
iid, ppObj);
}
static HRESULT WINAPI
IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj)
{
return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2,
IDirectDraw7, This),
iid, ppObj);
}
static HRESULT WINAPI
IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj)
{
return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4,
IDirectDraw7, This),
iid, ppObj);
}
static ULONG WINAPI
IDirectDrawImpl_AddRef(LPDIRECTDRAW This)
{
return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw, IDirectDraw7,
This));
}
static ULONG WINAPI
IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 This)
{
return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2, IDirectDraw7,
This));
}
static ULONG WINAPI
IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 This)
{
return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4, IDirectDraw7,
This));
}
static ULONG WINAPI
IDirectDrawImpl_Release(LPDIRECTDRAW This)
{
return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw, IDirectDraw7,
This));
}
static ULONG WINAPI
IDirectDraw2Impl_Release(LPDIRECTDRAW2 This)
{
return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2, IDirectDraw7,
This));
}
static ULONG WINAPI
IDirectDraw4Impl_Release(LPDIRECTDRAW4 This)
{
return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4, IDirectDraw7,
This));
}
static HRESULT WINAPI
IDirectDrawImpl_Compact(LPDIRECTDRAW This)
{
return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw, IDirectDraw7,
This));
}
static HRESULT WINAPI
IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This)
{
return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2, IDirectDraw7,
This));
}
static HRESULT WINAPI
IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This)
{
return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4, IDirectDraw7,
This));
}
static HRESULT WINAPI
IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags,
LPDIRECTDRAWCLIPPER *ppClipper,
IUnknown *pUnkOuter)
{
return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw,
IDirectDraw7,
This),
dwFlags, ppClipper, pUnkOuter);
}
static HRESULT WINAPI
IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags,
LPDIRECTDRAWCLIPPER *ppClipper,
IUnknown *pUnkOuter)
{
return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2,
IDirectDraw7,
This),
dwFlags, ppClipper, pUnkOuter);
}
static HRESULT WINAPI
IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags,
LPDIRECTDRAWCLIPPER *ppClipper,
IUnknown *pUnkOuter)
{
return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4,
IDirectDraw7,
This),
dwFlags, ppClipper, pUnkOuter);
}
static HRESULT WINAPI
IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags,
LPPALETTEENTRY pEntries,
LPDIRECTDRAWPALETTE *ppPalette,
IUnknown *pUnkOuter)
{
return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw,
IDirectDraw7,
This),
dwFlags, pEntries, ppPalette, pUnkOuter);
}
static HRESULT WINAPI
IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags,
LPPALETTEENTRY pEntries,
LPDIRECTDRAWPALETTE *ppPalette,
IUnknown *pUnkOuter)
{
return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2,
IDirectDraw7,
This),
dwFlags, pEntries, ppPalette, pUnkOuter);
}
static HRESULT WINAPI
IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags,
LPPALETTEENTRY pEntries,
LPDIRECTDRAWPALETTE *ppPalette,
IUnknown *pUnkOuter)
{
return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4,
IDirectDraw7,
This),
dwFlags, pEntries, ppPalette, pUnkOuter);
}
static HRESULT WINAPI
IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc,
LPDIRECTDRAWSURFACE *ppSurface,
IUnknown *pUnkOuter)
{
LPDIRECTDRAWSURFACE7 pSurface7;
HRESULT hr;
/* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
* since the data layout is the same */
hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw,
IDirectDraw7,
This),
(LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*ppSurface = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
IDirectDrawSurface7, IDirectDrawSurface3,
pSurface7);
return hr;
}
static HRESULT WINAPI
IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc,
LPDIRECTDRAWSURFACE *ppSurface,
IUnknown *pUnkOuter)
{
LPDIRECTDRAWSURFACE7 pSurface7;
HRESULT hr;
hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2,
IDirectDraw7,
This),
(LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
IDirectDrawSurface7, IDirectDrawSurface3,
pSurface7);
return hr;
}
static HRESULT WINAPI
IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc,
LPDIRECTDRAWSURFACE4 *ppSurface,
IUnknown *pUnkOuter)
{
return IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4,
IDirectDraw7,
This),
pSDesc,
(LPDIRECTDRAWSURFACE7 *)ppSurface,
pUnkOuter);
}
static HRESULT WINAPI
IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc,
LPDIRECTDRAWSURFACE *ppDst)
{
LPDIRECTDRAWSURFACE7 pDst7;
HRESULT hr;
hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw,
IDirectDraw7, This),
COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
IDirectDrawSurface3,
IDirectDrawSurface7,
pSrc),
&pDst7);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
IDirectDrawSurface3, pDst7);
return hr;
}
static HRESULT WINAPI
IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc,
LPDIRECTDRAWSURFACE *ppDst)
{
LPDIRECTDRAWSURFACE7 pDst7;
HRESULT hr;
hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw2,
IDirectDraw7, This),
COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
IDirectDrawSurface3,
IDirectDrawSurface7,
pSrc),
&pDst7);
/* This coercion is safe, since the IDirectDrawSurface3 vtable has the
* IDirectDrawSurface vtable layout at the beginning */
*ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
IDirectDrawSurface3, pDst7);
return hr;
}
static HRESULT WINAPI
IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This,
LPDIRECTDRAWSURFACE4 pSrc,
LPDIRECTDRAWSURFACE4 *ppDst)
{
return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
IDirectDraw4,
IDirectDraw7,
This),
(LPDIRECTDRAWSURFACE7)pSrc,
(LPDIRECTDRAWSURFACE7 *)ppDst);
}
struct displaymodescallback_context
{
LPDDENUMMODESCALLBACK func;
LPVOID context;
};
static HRESULT CALLBACK
EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context)
{
DDSURFACEDESC DDSD;
struct displaymodescallback_context *cbcontext = context;
memcpy(&DDSD,pDDSD2,sizeof(DDSD));
DDSD.dwSize = sizeof(DDSD);
return cbcontext->func(&DDSD, cbcontext->context);
}
static HRESULT WINAPI
IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags,
LPDDSURFACEDESC pDDSD, LPVOID context,
LPDDENUMMODESCALLBACK cb)
{
struct displaymodescallback_context cbcontext;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -