- Implement GdiConvertAndCheckDC and Abort callback support routine.

svn path=/trunk/; revision=41091
This commit is contained in:
James Tabor 2009-05-24 04:07:47 +00:00
parent e9cab0901b
commit e7651266fd
4 changed files with 37 additions and 4 deletions

View file

@ -31,6 +31,8 @@ typedef INT
#define METAFILE_MEMORY 1
#define METAFILE_DISK 2
#define SAPCALLBACKDELAY 244
/* MACRO ********************************************************************/
#define ROP_USES_SOURCE(Rop) (((Rop) << 2 ^ Rop) & 0xCC0000)
@ -238,4 +240,6 @@ int
WINAPI
GdiGetBitmapBitsSize(BITMAPINFO *lpbmi);
VOID GdiSAPCallback(PLDC pldc);
/* EOF */

View file

@ -164,6 +164,23 @@ PLDC GdiGetLDC(HDC hDC)
return Dc_Attr->pvLDC;
}
VOID GdiSAPCallback(PLDC pldc)
{
DWORD Time, NewTime = GetTickCount();
Time = NewTime - pldc->CallBackTick;
if ( Time < SAPCALLBACKDELAY) return;
pldc->CallBackTick = NewTime;
if ( pldc->pAbortProc(pldc->hDC, 0) )
{
CancelDC(pldc->hDC);
AbortDoc(pldc->hDC);
}
}
/*
* @implemented
*/

View file

@ -1142,15 +1142,26 @@ GdiCleanCacheDC(HDC hdc)
}
/*
* @unimplemented
* @implemented
*/
HDC
WINAPI
GdiConvertAndCheckDC(HDC hdc)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
PLDC pldc;
ULONG hType = GDI_HANDLE_GET_TYPE(hdc);
if (hType == GDILoObjType_LO_DC_TYPE || hType == GDILoObjType_LO_METADC16_TYPE)
return hdc;
pldc = GdiGetLDC(hdc);
if (pldc)
{
if (pldc->Flags & LDC_SAPCALLBACK) GdiSAPCallback(pldc);
if (pldc->Flags & LDC_KILL_DOCUMENT) return NULL;
if (pldc->Flags & LDC_STARTPAGE) StartPage(hdc);
return hdc;
}
SetLastError(ERROR_INVALID_HANDLE);
return NULL;
}
/*

View file

@ -178,6 +178,7 @@
#define LDC_SAPCALLBACK 0x00000020
#define LDC_INIT_DOCUMENT 0x00000040
#define LDC_INIT_PAGE 0x00000080
#define LDC_STARTPAGE 0x00000100
#define LDC_PLAY_MFDC 0x00000800
#define LDC_CLOCKWISE 0x00002000
#define LDC_KILL_DOCUMENT 0x00010000