⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 4 页
字号:
    return DD_OK;}/* I really don't understand how this is supposed to work. * We only consider dwHeight, dwWidth and ddpfPixelFormat.dwFlags. */HRESULTMain_DirectDraw_EnumCreateableSurfaces(IDirectDrawImpl *This, DWORD dwFlags,				       LPDDSURFACEDESC2 lpDDSD2,				       LPVOID context,				       LPDDENUMSURFACESCALLBACK7 callback){    FIXME("This isn't going to work.\n");    if ((dwFlags & DDENUMSURFACES_MATCHTYPE) != DDENUMSURFACES_MATCH)	return DDERR_INVALIDPARAMS;    /* TODO: implement this.     * Does this work before SCL is called?     * Does it only consider off-screen surfaces?     */    return E_FAIL;}/* For unsigned x. 0 is not a power of 2. */#define IS_POW_2(x) (((x) & ((x) - 1)) == 0)HRESULT WINAPIMain_DirectDraw_EnumSurfaces(LPDIRECTDRAW7 iface, DWORD dwFlags,			     LPDDSURFACEDESC2 lpDDSD2, LPVOID context,			     LPDDENUMSURFACESCALLBACK7 callback){    ICOM_THIS(IDirectDrawImpl, iface);    TRACE("(%p)->(0x%lx, %p, %p, %p)\n", iface, dwFlags, lpDDSD2, context,	  callback);    if (callback == NULL)	return DDERR_INVALIDPARAMS;    if (dwFlags & ~(DDENUMSURFACES_SEARCHTYPE|DDENUMSURFACES_MATCHTYPE))	return DDERR_INVALIDPARAMS;    if (!IS_POW_2(dwFlags & DDENUMSURFACES_SEARCHTYPE)	|| !IS_POW_2(dwFlags & DDENUMSURFACES_MATCHTYPE))	return DDERR_INVALIDPARAMS;    if (dwFlags & DDENUMSURFACES_DOESEXIST)    {	return Main_DirectDraw_EnumExistingSurfaces(This, dwFlags, lpDDSD2,						    context, callback);    }    else    {	return Main_DirectDraw_EnumCreateableSurfaces(This, dwFlags, lpDDSD2,						      context, callback);    }}HRESULT WINAPIMain_DirectDraw_EvaluateMode(LPDIRECTDRAW7 iface,DWORD a,DWORD* b){    ICOM_THIS(IDirectDrawImpl,iface);    FIXME("(%p)->() stub\n", This);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface){    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)->()\n",This);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,			LPDDCAPS pHELCaps){    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p,%p,%p)\n",This,pDriverCaps,pHELCaps);    if (pDriverCaps != NULL) {	DD_STRUCT_COPY_BYSIZE(pDriverCaps,&This->caps);	if (TRACE_ON(ddraw)) {	  TRACE("Driver Caps : \n");	  DDRAW_dump_DDCAPS(pDriverCaps);	}    }    if (pHELCaps != NULL) {	DD_STRUCT_COPY_BYSIZE(pHELCaps,&This->caps);	if (TRACE_ON(ddraw)) {	  TRACE("HEL Caps : \n");	  DDRAW_dump_DDCAPS(pHELCaps);	}    }    return DD_OK;}/* GetCaps *//* GetDeviceIdentifier *//* GetDIsplayMode */HRESULT WINAPIMain_DirectDraw_GetFourCCCodes(LPDIRECTDRAW7 iface, LPDWORD pNumCodes,			       LPDWORD pCodes){    ICOM_THIS(IDirectDrawImpl,iface);    if (*pNumCodes) {	    *pNumCodes=0;    }    FIXME("(%p,%p,%p), stub\n",This,pNumCodes,pCodes);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface,			      LPDIRECTDRAWSURFACE7 *lplpGDIDDSSurface){    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)->(%p)\n", This, lplpGDIDDSSurface);    TRACE("returning primary (%p)\n", This->primary_surface);    *lplpGDIDDSSurface = ICOM_INTERFACE(This->primary_surface, IDirectDrawSurface7);    if (*lplpGDIDDSSurface)	IDirectDrawSurface7_AddRef(*lplpGDIDDSSurface);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq){    ICOM_THIS(IDirectDrawImpl,iface);    FIXME("(%p)->(%p) returns 60 Hz always\n",This,freq);    *freq = 60*100; /* 60 Hz */    return DD_OK;}HRESULT WINAPIMain_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine){    ICOM_THIS(IDirectDrawImpl,iface);    FIXME("(%p)->(%p)\n", This, lpdwScanLine);    *lpdwScanLine = 1;    return DD_OK;}HRESULT WINAPIMain_DirectDraw_GetSurfaceFromDC(LPDIRECTDRAW7 iface, HDC hdc,				 LPDIRECTDRAWSURFACE7 *lpDDS){    ICOM_THIS(IDirectDrawImpl,iface);    FIXME("(%p)->(%08ld,%p)\n", This, (DWORD) hdc, lpDDS);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status){    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)->(%p)\n",This,status);    *status = TRUE;    return DD_OK;}/* If we were not initialised then Uninit_Main_IDirectDraw7_Initialize would * have been called instead. */HRESULT WINAPIMain_DirectDraw_Initialize(LPDIRECTDRAW7 iface, LPGUID lpGuid){    TRACE("(%p)->(%s)\n", iface, debugstr_guid(lpGuid));    return DDERR_ALREADYINITIALIZED;}HRESULT WINAPIMain_DirectDraw_RestoreAllSurfaces(LPDIRECTDRAW7 iface){    ICOM_THIS(IDirectDrawImpl,iface);    IDirectDrawSurfaceImpl* surf;    TRACE("(%p)->()\n", This);    for (surf = This->surfaces; surf != NULL; surf = surf->next_ddraw)	IDirectDrawSurface7_Restore(ICOM_INTERFACE(surf, IDirectDrawSurface7));    return DD_OK;}static void DDRAW_SubclassWindow(IDirectDrawImpl* This){    /* Well we don't actually subclass the window yet. */    SetPropA(This->window, ddProp, This);}static void DDRAW_UnsubclassWindow(IDirectDrawImpl* This){    RemovePropA(This->window, ddProp);}HRESULT WINAPIMain_DirectDraw_SetCooperativeLevel(LPDIRECTDRAW7 iface, HWND hwnd,				    DWORD cooplevel){    ICOM_THIS(IDirectDrawImpl,iface);    FIXME("(%p)->(%08lx,%08lx)\n",This,(DWORD)hwnd,cooplevel);    DDRAW_dump_cooperativelevel(cooplevel);    /* Makes realMYST test happy. */    if (This->cooperative_level == cooplevel	&& This->window == hwnd)	return DD_OK;    /* XXX "It cannot be reset while the process has surfaces or palettes     * created." Otherwise the window can be changed???     *     * This appears to be wrong - comment it out for now.    if (This->window)	return DDERR_HWNDALREADYSET;    */    if (!(cooplevel & (DDSCL_EXCLUSIVE|DDSCL_NORMAL)))	return DDERR_INVALIDPARAMS;    This->window = hwnd;    This->cooperative_level = cooplevel;    This->local.hWnd = (ULONG_PTR)hwnd;    This->local.dwLocalFlags |= DDRAWILCL_SETCOOPCALLED;    /* not entirely sure about these */    if (cooplevel & DDSCL_EXCLUSIVE)     This->local.dwLocalFlags |= DDRAWILCL_HASEXCLUSIVEMODE;    if (cooplevel & DDSCL_FULLSCREEN)    This->local.dwLocalFlags |= DDRAWILCL_ISFULLSCREEN;    if (cooplevel & DDSCL_ALLOWMODEX)    This->local.dwLocalFlags |= DDRAWILCL_ALLOWMODEX;    if (cooplevel & DDSCL_MULTITHREADED) This->local.dwLocalFlags |= DDRAWILCL_MULTITHREADED;    if (cooplevel & DDSCL_FPUSETUP)      This->local.dwLocalFlags |= DDRAWILCL_FPUSETUP;    if (cooplevel & DDSCL_FPUPRESERVE)   This->local.dwLocalFlags |= DDRAWILCL_FPUPRESERVE;    if (This->local.lpGbl) {	/* assume that this app is the active app (in wine, there's	 * probably only one app per global ddraw object anyway) */	if (cooplevel & DDSCL_EXCLUSIVE) This->local.lpGbl->lpExclusiveOwner = &This->local;	else if (This->local.lpGbl->lpExclusiveOwner == &This->local)	    This->local.lpGbl->lpExclusiveOwner = NULL;	if (This->set_exclusive_mode)	    This->set_exclusive_mode(This, (cooplevel & DDSCL_EXCLUSIVE) != 0);    }    ShowWindow(hwnd, SW_SHOW);    DDRAW_SubclassWindow(This);    /* TODO Does it also get resized to the current screen size? */    return DD_OK;}HRESULT WINAPIMain_DirectDraw_SetDisplayMode(LPDIRECTDRAW7 iface, DWORD dwWidth,			       DWORD dwHeight, LONG lPitch,			       DWORD dwRefreshRate, DWORD dwFlags,			       const DDPIXELFORMAT* pixelformat){    short screenX;    short screenY;    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)->SetDisplayMode(%ld,%ld)\n",This,dwWidth,dwHeight);    if (!(This->cooperative_level & DDSCL_EXCLUSIVE))	return DDERR_NOEXCLUSIVEMODE;    if (!IsWindow(This->window))	return DDERR_GENERIC; /* unchecked */    LosePrimarySurface(This);    screenX = GetSystemMetrics(SM_CXSCREEN);    screenY = GetSystemMetrics(SM_CYSCREEN);    This->width = dwWidth;    This->height = dwHeight;    This->pitch = lPitch;    This->pixelformat = *pixelformat;    /* Position the window in the center of the screen - don't center for now */    /* MoveWindow(This->window, (screenX-dwWidth)/2, (screenY-dwHeight)/2,                  dwWidth, dwHeight, TRUE);*/    MoveWindow(This->window, 0, 0, dwWidth, dwHeight, TRUE);    SetFocus(This->window);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7 iface){    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)\n",This);    if (!(This->cooperative_level & DDSCL_EXCLUSIVE))	return DDERR_NOEXCLUSIVEMODE;    /* Lose the primary surface if the resolution changes. */    if (This->orig_width != This->width || This->orig_height != This->height	|| This->orig_pitch != This->pitch	|| This->orig_pixelformat.dwFlags != This->pixelformat.dwFlags	|| !Main_DirectDraw_DDPIXELFORMAT_Match(&This->pixelformat,						&This->orig_pixelformat))    {	LosePrimarySurface(This);    }    /* TODO Move the window back where it belongs. */    return DD_OK;}HRESULT WINAPIMain_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,				     HANDLE h){    ICOM_THIS(IDirectDrawImpl,iface);    FIXME("(%p)->(flags=0x%08lx,handle=%p)\n",This,dwFlags,h);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD){    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)->GetDisplayMode(%p)\n",This,pDDSD);    pDDSD->dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PITCH|DDSD_PIXELFORMAT|DDSD_REFRESHRATE;    pDDSD->dwHeight = This->height;    pDDSD->dwWidth = This->width;    pDDSD->u1.lPitch = This->pitch;    pDDSD->u2.dwRefreshRate = 60;    pDDSD->u4.ddpfPixelFormat = This->pixelformat;    pDDSD->ddsCaps.dwCaps = 0;    return DD_OK;}static INT32 allocate_memory(IDirectDrawImpl *This, DWORD mem){    if (mem > This->available_vidmem) return -1;    This->available_vidmem -= mem;    return This->available_vidmem;}static void free_memory(IDirectDrawImpl *This, DWORD mem){    This->available_vidmem += mem;}HRESULT WINAPIMain_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps,				   LPDWORD total, LPDWORD free){    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)->(%p,%p,%p)\n", This,ddscaps,total,free);    if (TRACE_ON(ddraw)) {        TRACE(" Asking for memory of type : ");        DDRAW_dump_DDSCAPS2(ddscaps); TRACE("\n");    }    /* We have 16 MB videomemory */    if (total)	*total= This->total_vidmem;    if (free)	*free = This->available_vidmem;    TRACE(" returning (total) %ld / (free) %ld\n", 	  total != NULL ? *total : 0, 	  free  != NULL ? *free  : 0);        return DD_OK;}HRESULT WINAPI Main_DirectDraw_TestCooperativeLevel(LPDIRECTDRAW7 iface) {    ICOM_THIS(IDirectDrawImpl,iface);    TRACE("(%p)->(): stub\n", This);    return DD_OK;}HRESULT WINAPIMain_DirectDraw_StartModeTest(LPDIRECTDRAW7 iface, LPSIZE pModes,			      DWORD dwNumModes, DWORD dwFlags){    ICOM_THIS(IDirectDrawImpl,iface);    FIXME("(%p)->() stub\n", This);    return DD_OK;}/*** Owned object management. */void Main_DirectDraw_AddSurface(IDirectDrawImpl* This,				IDirectDrawSurfaceImpl* surface){    assert(surface->ddraw_owner == NULL || surface->ddraw_owner == This);    surface->ddraw_owner = This;    /* where should it go? */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -