Quick implementation of DxEngCreateMemoryDC and DxEngCleanDC. It compiles. 8^D

svn path=/trunk/; revision=33310
This commit is contained in:
James Tabor 2008-05-06 04:22:49 +00:00
parent 19381c9fed
commit d6273ed28e
3 changed files with 46 additions and 4 deletions

View file

@ -263,5 +263,7 @@ COLORREF STDCALL IntGdiGetTextColor(HDC hDC);
INT STDCALL IntGdiSetStretchBltMode(HDC hDC, INT stretchBltMode);
VOID FASTCALL IntGdiReferencePdev(PGDIDEVICE pPDev);
VOID FASTCALL IntGdiUnreferencePdev(PGDIDEVICE pPDev, DWORD CleanUpType);
HDC FASTCALL IntGdiCreateDisplayDC(HDEV hDev, ULONG DcType, BOOL EmptyDC);
BOOL FASTCALL IntGdiCleanDC(HDC hDC);
#endif /* not __WIN32K_DC_H */

View file

@ -654,8 +654,7 @@ HDC
STDCALL
DxEngCreateMemoryDC(HDEV hDev)
{
UNIMPLEMENTED;
return NULL;
return IntGdiCreateDisplayDC(hDev, DC_TYPE_MEMORY, FALSE);
}
/************************************************************************/
@ -732,8 +731,7 @@ BOOLEAN
STDCALL
DxEngCleanDC(HDC hdc)
{
UNIMPLEMENTED;
return FALSE;
return IntGdiCleanDC(hdc);
}
/************************************************************************/

View file

@ -31,6 +31,7 @@
static GDIDEVICE PrimarySurface;
static KEVENT VideoDriverNeedsPreparation;
static KEVENT VideoDriverPrepared;
static PDC defaultDCstate = NULL;
EDD_DIRECTDRAW_GLOBAL edd_DdirectDraw_Global;
NTSTATUS FASTCALL
@ -928,6 +929,47 @@ NtGdiOpenDCW( PUNICODE_STRING Device,
}
HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev, ULONG DcType, BOOL EmptyDC)
{
HDC hDC;
UNICODE_STRING DriverName;
RtlInitUnicodeString(&DriverName, L"DISPLAY");
if (DcType != DC_TYPE_MEMORY)
hDC = IntGdiCreateDC(&DriverName, NULL, NULL, NULL, (DcType == DC_TYPE_INFO));
else
hDC = NtGdiCreateCompatibleDC(NULL); // OH~ Yuck! I think I taste vomit in my mouth!
//
// There is room to grow here~
//
//
// If NULL, first time through! Build the default (was window) dc!
//
if (hDC && !defaultDCstate) // Ultra HAX! Dedicated to GvG!
{ // This is a cheesy way to do this.
PDC dc = DC_LockDc ( hDC );
defaultDCstate = ExAllocatePoolWithTag(PagedPool, sizeof(DC), TAG_DC);
RtlZeroMemory(defaultDCstate, sizeof(DC));
IntGdiCopyToSaveState(dc, defaultDCstate);
DC_UnlockDc( dc );
}
return hDC;
}
BOOL FASTCALL
IntGdiCleanDC(HDC hDC)
{
PDC dc;
dc = DC_LockDc ( hDC );
// Clean the DC
if (defaultDCstate) IntGdiCopyFromSaveState(dc, defaultDCstate, hDC );
DC_UnlockDc(dc);
return TRUE;
}
//
//
//