Remove hwnd and hdc, so it being store to right struct.

svn path=/trunk/; revision=19015
This commit is contained in:
Magnus Olsen 2005-11-05 15:05:31 +00:00
parent 0e95797fc0
commit 0102313dcb
3 changed files with 34 additions and 24 deletions

View file

@ -19,12 +19,9 @@ HRESULT Hal_DirectDraw_Initialize (LPDIRECTDRAW7 iface)
This->DirectDrawGlobal.lp16DD = &This->DirectDrawGlobal; This->DirectDrawGlobal.lp16DD = &This->DirectDrawGlobal;
/* get the object */ /* get the object */
if(!DdCreateDirectDrawObject (&This->DirectDrawGlobal, This->hdc)) if(!DdCreateDirectDrawObject (&This->DirectDrawGlobal, (HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC ))
return DDERR_INVALIDPARAMS; return DDERR_INVALIDPARAMS;
BOOL dummy;
DdReenableDirectDrawObject(&This->DirectDrawGlobal, &dummy);
/* alloc all the space */ /* alloc all the space */
This->DirectDrawGlobal.lpDDCBtmp = (LPDDHAL_CALLBACKS)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->DirectDrawGlobal.lpDDCBtmp = (LPDDHAL_CALLBACKS)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(DDHAL_CALLBACKS)); sizeof(DDHAL_CALLBACKS));
@ -267,12 +264,14 @@ HRESULT Hal_DirectDraw_Initialize (LPDIRECTDRAW7 iface)
This->HalInfo.GetDriverInfo(&DriverInfo); This->HalInfo.GetDriverInfo(&DriverInfo);
/* Get the ZPixelFormats */ /* Get the ZPixelFormats */
/* take off this it until we figout how lpexluisev should be fild in
This->DirectDrawGlobal.lpZPixelFormats = (LPDDPIXELFORMAT) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->DirectDrawGlobal.lpZPixelFormats = (LPDDPIXELFORMAT) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(DDPIXELFORMAT) * This->DirectDrawGlobal.dwNumZPixelFormats); sizeof(DDPIXELFORMAT) * This->DirectDrawGlobal.dwNumZPixelFormats);
DriverInfo.guidInfo = GUID_ZPixelFormats; DriverInfo.guidInfo = GUID_ZPixelFormats;
DriverInfo.lpvData = (PVOID)This->DirectDrawGlobal.lpZPixelFormats; DriverInfo.lpvData = (PVOID)This->DirectDrawGlobal.lpZPixelFormats;
DriverInfo.dwExpectedSize = sizeof(DDPIXELFORMAT); DriverInfo.dwExpectedSize = sizeof(DDPIXELFORMAT);
This->HalInfo.GetDriverInfo(&DriverInfo); This->HalInfo.GetDriverInfo(&DriverInfo);
*/
/* Setup some info from the callbacks we got */ /* Setup some info from the callbacks we got */
DDHAL_GETAVAILDRIVERMEMORYDATA mem; DDHAL_GETAVAILDRIVERMEMORYDATA mem;

View file

@ -21,14 +21,23 @@ HRESULT WINAPI Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)
This->InitializeDraw = TRUE; This->InitializeDraw = TRUE;
/* Setup the lpExclusiveOwner struct in msdn this struct member is undoc
I am using there name to figout which info it should be fild with
My hardware drv does not support call to SetExusive so I can not
debug it see how it should be fild
*/
This->DirectDrawGlobal.lpExclusiveOwner = &This->ExclusiveOwner;
memset(&This->ExclusiveOwner, 0, sizeof(DDRAWI_DIRECTDRAW_LCL));
This->DirectDrawGlobal.lpExclusiveOwner->dwProcessId = GetCurrentProcessId();
This->DirectDrawGlobal.lpExclusiveOwner->hDC = ((ULONG_PTR)GetWindowDC(GetDesktopWindow()));
This->DirectDrawGlobal.lpExclusiveOwner->hWnd = ((ULONG_PTR)GetDesktopWindow());
This->DirectDrawGlobal.lpExclusiveOwner->lpGbl = &This->DirectDrawGlobal;
// get the HDC This->Height = GetDeviceCaps((HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC , VERTRES);
This->hdc = GetWindowDC(GetDesktopWindow()); This->Width = GetDeviceCaps((HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC , HORZRES);
This->Height = GetDeviceCaps(This->hdc, VERTRES); This->Bpp = GetDeviceCaps((HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC , BITSPIXEL);
This->Width = GetDeviceCaps(This->hdc, HORZRES);
This->Bpp = GetDeviceCaps(This->hdc, BITSPIXEL);
// call software first // call software first
if((ret = Hal_DirectDraw_Initialize (iface)) != DD_OK) if((ret = Hal_DirectDraw_Initialize (iface)) != DD_OK)
@ -51,12 +60,9 @@ HRESULT WINAPI Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hw
IDirectDrawImpl* This = (IDirectDrawImpl*)iface; IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
// check the parameters // check the parameters
if (This->cooperative_level == cooplevel && This->window == hwnd) if ((This->cooperative_level == cooplevel) && ((HWND)This->DirectDrawGlobal.lpExclusiveOwner->hWnd == hwnd))
return DD_OK; return DD_OK;
if (This->window)
return DDERR_HWNDALREADYSET;
if (This->cooperative_level) if (This->cooperative_level)
return DDERR_EXCLUSIVEMODEALREADYSET; return DDERR_EXCLUSIVEMODEALREADYSET;
@ -67,8 +73,8 @@ HRESULT WINAPI Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hw
return DDERR_INVALIDPARAMS; return DDERR_INVALIDPARAMS;
// set the data // set the data
This->window = hwnd; This->DirectDrawGlobal.lpExclusiveOwner->hWnd = (ULONG_PTR) hwnd;
This->hdc = GetDC(hwnd); This->DirectDrawGlobal.lpExclusiveOwner->hDC = (ULONG_PTR)GetDC(hwnd);
This->cooperative_level = cooplevel; This->cooperative_level = cooplevel;
if (This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_SETEXCLUSIVEMODE) if (This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_SETEXCLUSIVEMODE)

View file

@ -14,23 +14,28 @@
typedef struct typedef struct
{ {
/* Setup the Vtbl COM table */
IDirectDraw7Vtbl* lpVtbl; IDirectDraw7Vtbl* lpVtbl;
IDirectDraw4Vtbl* lpVtbl_v4; IDirectDraw4Vtbl* lpVtbl_v4;
IDirectDraw2Vtbl* lpVtbl_v2; IDirectDraw2Vtbl* lpVtbl_v2;
IDirectDrawVtbl* lpVtbl_v1; IDirectDrawVtbl* lpVtbl_v1;
/* The main struct that contain all info from the HAL and HEL */
DDRAWI_DIRECTDRAW_GBL DirectDrawGlobal; DDRAWI_DIRECTDRAW_GBL DirectDrawGlobal;
/* ExclusiveOwner */
DDRAWI_DIRECTDRAW_LCL ExclusiveOwner;
/* MISC info that will be remove in futuer */
DDHAL_DDMISCELLANEOUSCALLBACKS Misc2Callback; DDHAL_DDMISCELLANEOUSCALLBACKS Misc2Callback;
DDHALINFO HalInfo; DDHALINFO HalInfo;
HWND window;
DWORD cooperative_level; DWORD cooperative_level;
HDC hdc;
int Height, Width, Bpp; int Height, Width, Bpp;
GUID InGUID;
BOOL InitializeDraw; BOOL InitializeDraw;
} IDirectDrawImpl; } IDirectDrawImpl;
/******** Surface Object ********/ /******** Surface Object ********/