📄 main.c
字号:
surface->next_ddraw = This->surfaces; surface->prev_ddraw = NULL; if (This->surfaces) This->surfaces->prev_ddraw = surface; This->surfaces = surface;}void Main_DirectDraw_RemoveSurface(IDirectDrawImpl* This, IDirectDrawSurfaceImpl* surface){ assert(surface->ddraw_owner == This); if (This->surfaces == surface) This->surfaces = surface->next_ddraw; if (This->primary_surface == surface) This->primary_surface = NULL; if (surface->next_ddraw) surface->next_ddraw->prev_ddraw = surface->prev_ddraw; if (surface->prev_ddraw) surface->prev_ddraw->next_ddraw = surface->next_ddraw;}static void Main_DirectDraw_DeleteSurfaces(IDirectDrawImpl* This){ while (This->surfaces != NULL) Main_DirectDrawSurface_ForceDestroy(This->surfaces);}void Main_DirectDraw_AddClipper(IDirectDrawImpl* This, IDirectDrawClipperImpl* clipper){ assert(clipper->ddraw_owner == NULL || clipper->ddraw_owner == This); clipper->ddraw_owner = This; clipper->next_ddraw = This->clippers; clipper->prev_ddraw = NULL; if (This->clippers) This->clippers->prev_ddraw = clipper; This->clippers = clipper;}void Main_DirectDraw_RemoveClipper(IDirectDrawImpl* This, IDirectDrawClipperImpl* clipper){ assert(clipper->ddraw_owner == This); if (This->clippers == clipper) This->clippers = clipper->next_ddraw; if (clipper->next_ddraw) clipper->next_ddraw->prev_ddraw = clipper->prev_ddraw; if (clipper->prev_ddraw) clipper->prev_ddraw->next_ddraw = clipper->next_ddraw;}static void Main_DirectDraw_DeleteClippers(IDirectDrawImpl* This){ while (This->clippers != NULL) Main_DirectDrawClipper_ForceDestroy(This->clippers);}void Main_DirectDraw_AddPalette(IDirectDrawImpl* This, IDirectDrawPaletteImpl* palette){ assert(palette->ddraw_owner == NULL || palette->ddraw_owner == This); palette->ddraw_owner = This; /* where should it go? */ palette->next_ddraw = This->palettes; palette->prev_ddraw = NULL; if (This->palettes) This->palettes->prev_ddraw = palette; This->palettes = palette;}void Main_DirectDraw_RemovePalette(IDirectDrawImpl* This, IDirectDrawPaletteImpl* palette){ assert(palette->ddraw_owner == This); if (This->palettes == palette) This->palettes = palette->next_ddraw; if (palette->next_ddraw) palette->next_ddraw->prev_ddraw = palette->prev_ddraw; if (palette->prev_ddraw) palette->prev_ddraw->next_ddraw = palette->next_ddraw;}static void Main_DirectDraw_DeletePalettes(IDirectDrawImpl* This){ while (This->palettes != NULL) Main_DirectDrawPalette_ForceDestroy(This->palettes);}/*** ??? */static voidLoseSurface(IDirectDrawSurfaceImpl *surface){ if (surface != NULL) surface->lose_surface(surface);}static voidLosePrimarySurface(IDirectDrawImpl *This){ /* MSDN: "If another application changes the display mode, the primary * surface is lost, and the method returns DDERR_SURFACELOST until the * primary surface is recreated to match the new display mode." * * We mark all the primary surfaces as lost as soon as the display * mode is changed (by any application). */ LoseSurface(This->primary_surface);}/****************************************************************************** * Uninitialised DirectDraw functions * * This vtable is used when a DirectDraw object is created with * CoCreateInstance. The only usable method is Initialize. */void Uninit_DirectDraw_final_release(IDirectDrawImpl *This){ Main_DirectDraw_final_release(This);}static ICOM_VTABLE(IDirectDraw7) Uninit_DirectDraw_VTable;/* Not called from the vtable. */HRESULT Uninit_DirectDraw_Construct(IDirectDrawImpl *This, BOOL ex){ HRESULT hr; hr = Main_DirectDraw_Construct(This, ex); if (FAILED(hr)) return hr; This->final_release = Uninit_DirectDraw_final_release; ICOM_INIT_INTERFACE(This, IDirectDraw7, Uninit_DirectDraw_VTable); return S_OK;}HRESULT Uninit_DirectDraw_Create(const GUID* pGUID, LPDIRECTDRAW7* pIface, IUnknown* pUnkOuter, BOOL ex){ HRESULT hr; IDirectDrawImpl* This; assert(pUnkOuter == NULL); /* XXX no: we must check this */ This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl)); if (This == NULL) return E_OUTOFMEMORY; hr = Uninit_DirectDraw_Construct(This, ex); if (FAILED(hr)) HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, This); else *pIface = ICOM_INTERFACE(This, IDirectDraw7); return hr;}static HRESULT WINAPIUninit_DirectDraw_Initialize(LPDIRECTDRAW7 iface, LPGUID pDeviceGuid){ const ddraw_driver* driver; ICOM_THIS(IDirectDrawImpl, iface); TRACE("(%p)->(%p)\n", iface, pDeviceGuid); driver = DDRAW_FindDriver(pDeviceGuid); /* XXX This return value is not documented. (Not checked.) */ if (driver == NULL) return DDERR_INVALIDDIRECTDRAWGUID; return driver->init(This, pDeviceGuid);}static HRESULT WINAPIUninit_DirectDraw_Compact(LPDIRECTDRAW7 iface){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_CreatePalette(LPDIRECTDRAW7 iface, DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE *lplpDDPalette, IUnknown *pUnkOuter){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_CreateSurface(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 lpDDSurfaceDesc, LPDIRECTDRAWSURFACE7 *lplpDDSurface, IUnknown *pUnkOuter){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_DuplicateSurface(LPDIRECTDRAW7 iface, LPDIRECTDRAWSURFACE7 pSurf, LPDIRECTDRAWSURFACE7 *pDupSurf){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFlags, LPDDSURFACEDESC2 lpDDSD, LPVOID context, LPDDENUMMODESCALLBACK2 cb){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_EnumSurfaces(LPDIRECTDRAW7 iface, DWORD dwFlags, LPDDSURFACEDESC2 pDDSD, LPVOID context, LPDDENUMSURFACESCALLBACK7 cb){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, LPDDCAPS pHELCaps){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetFourCCCodes(LPDIRECTDRAW7 iface, LPDWORD pNumCodes, LPDWORD pCodes){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface, LPDIRECTDRAWSURFACE7 *pGDISurf){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface, LPDWORD pdwFreq){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD pdwScanLine){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, PBOOL pbIsInVB){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7 iface){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_SetCooperativeLevel(LPDIRECTDRAW7 iface, HWND hWnd, DWORD dwFlags){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_SetDisplayMode(LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags, HANDLE hEvent){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 pDDCaps, LPDWORD pdwTotal, LPDWORD pdwFree){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetSurfaceFromDC(LPDIRECTDRAW7 iface, HDC hDC, LPDIRECTDRAWSURFACE7 *pSurf){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_RestoreAllSurfaces(LPDIRECTDRAW7 iface){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_TestCooperativeLevel(LPDIRECTDRAW7 iface){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_GetDeviceIdentifier(LPDIRECTDRAW7 iface, LPDDDEVICEIDENTIFIER2 pDDDI, DWORD dwFlags){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_StartModeTest(LPDIRECTDRAW7 iface, LPSIZE pszModes, DWORD cModes, DWORD dwFlags){ return DDERR_NOTINITIALIZED;}static HRESULT WINAPIUninit_DirectDraw_EvaluateMode(LPDIRECTDRAW7 iface, DWORD dwFlags, LPDWORD pTimeout){ return DDERR_NOTINITIALIZED;}static ICOM_VTABLE(IDirectDraw7) Uninit_DirectDraw_VTable ={ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE Main_DirectDraw_QueryInterface, Main_DirectDraw_AddRef, Main_DirectDraw_Release, Uninit_DirectDraw_Compact, Uninit_DirectDraw_CreateClipper, Uninit_DirectDraw_CreatePalette, Uninit_DirectDraw_CreateSurface, Uninit_DirectDraw_DuplicateSurface, Uninit_DirectDraw_EnumDisplayModes, Uninit_DirectDraw_EnumSurfaces, Uninit_DirectDraw_FlipToGDISurface, Uninit_DirectDraw_GetCaps, Uninit_DirectDraw_GetDisplayMode, Uninit_DirectDraw_GetFourCCCodes, Uninit_DirectDraw_GetGDISurface, Uninit_DirectDraw_GetMonitorFrequency, Uninit_DirectDraw_GetScanLine, Uninit_DirectDraw_GetVerticalBlankStatus, Uninit_DirectDraw_Initialize, Uninit_DirectDraw_RestoreDisplayMode, Uninit_DirectDraw_SetCooperativeLevel, Uninit_DirectDraw_SetDisplayMode, Uninit_DirectDraw_WaitForVerticalBlank, Uninit_DirectDraw_GetAvailableVidMem, Uninit_DirectDraw_GetSurfaceFromDC, Uninit_DirectDraw_RestoreAllSurfaces, Uninit_DirectDraw_TestCooperativeLevel, Uninit_DirectDraw_GetDeviceIdentifier, Uninit_DirectDraw_StartModeTest, Uninit_DirectDraw_EvaluateMode};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -