mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 06:53:37 +00:00
[GDI32]
In Escape() make use of GdiGetDcAttr(), GreatLordish -> English and fix copy-pasta in comments, improve formatting, remove some code that (attention euphemism) wasn't exactly correct. svn path=/trunk/; revision=65889
This commit is contained in:
parent
c8bc34b358
commit
503848e61e
1 changed files with 44 additions and 62 deletions
|
@ -50,33 +50,35 @@ GdiFlush()
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
int
|
INT
|
||||||
WINAPI
|
WINAPI
|
||||||
Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
|
Escape(
|
||||||
|
_In_ HDC hdc,
|
||||||
|
_In_ INT nEscape,
|
||||||
|
_In_ INT cbInput,
|
||||||
|
_In_ LPCSTR lpvInData,
|
||||||
|
_Out_ LPVOID lpvOutData)
|
||||||
{
|
{
|
||||||
int retValue = SP_ERROR;
|
INT retValue = SP_ERROR;
|
||||||
HGDIOBJ hObject = hdc;
|
ULONG ulObjType;
|
||||||
UINT Type = 0;
|
|
||||||
LPVOID pUserData = NULL;
|
|
||||||
|
|
||||||
Type = GDI_HANDLE_GET_TYPE(hObject);
|
ulObjType = GDI_HANDLE_GET_TYPE(hdc);
|
||||||
|
|
||||||
if (Type == GDI_OBJECT_TYPE_METADC)
|
if (ulObjType == GDILoObjType_LO_METADC16_TYPE)
|
||||||
{
|
{
|
||||||
/* FIXME we do not support metafile */
|
/* FIXME we do not support metafile */
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||||
|
return SP_ERROR;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
switch (nEscape)
|
||||||
{
|
{
|
||||||
switch (nEscape)
|
|
||||||
{
|
|
||||||
case ABORTDOC:
|
case ABORTDOC:
|
||||||
/* Note Winodws check see if the handle have any user data for ABORTDOC command
|
/* Note: Windows checks if the handle has any user data for the ABORTDOC command
|
||||||
* ReactOS copy this behavior to be compatible with windows 2003
|
* ReactOS copies this behavior to be compatible with windows 2003
|
||||||
*/
|
*/
|
||||||
if ( (!GdiGetHandleUserData(hObject, (DWORD)Type, (PVOID) &pUserData)) ||
|
if (GdiGetDcAttr(hdc) == NULL)
|
||||||
(pUserData == NULL) )
|
|
||||||
{
|
{
|
||||||
GdiSetLastError(ERROR_INVALID_HANDLE);
|
GdiSetLastError(ERROR_INVALID_HANDLE);
|
||||||
retValue = FALSE;
|
retValue = FALSE;
|
||||||
|
@ -90,12 +92,11 @@ Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
|
||||||
case DRAFTMODE:
|
case DRAFTMODE:
|
||||||
case FLUSHOUTPUT:
|
case FLUSHOUTPUT:
|
||||||
case SETCOLORTABLE:
|
case SETCOLORTABLE:
|
||||||
/* Note 1: DRAFTMODE, FLUSHOUTPUT, SETCOLORTABLE is outdated and been replace with other api */
|
/* Note 1: DRAFTMODE, FLUSHOUTPUT, SETCOLORTABLE are outdated */
|
||||||
/* Note 2: Winodws check see if the handle have any user data for DRAFTMODE, FLUSHOUTPUT, SETCOLORTABLE command
|
/* Note 2: Windows checks if the handle has any user data for the DRAFTMODE, FLUSHOUTPUT, SETCOLORTABLE commands
|
||||||
* ReactOS copy this behavior to be compatible with windows 2003
|
* ReactOS copies this behavior to be compatible with windows 2003
|
||||||
*/
|
*/
|
||||||
if ( (!GdiGetHandleUserData(hObject, (DWORD)Type, (PVOID) &pUserData)) ||
|
if (GdiGetDcAttr(hdc) == NULL)
|
||||||
(pUserData == NULL) )
|
|
||||||
{
|
{
|
||||||
GdiSetLastError(ERROR_INVALID_HANDLE);
|
GdiSetLastError(ERROR_INVALID_HANDLE);
|
||||||
}
|
}
|
||||||
|
@ -103,11 +104,10 @@ Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SETABORTPROC:
|
case SETABORTPROC:
|
||||||
/* Note : Winodws check see if the handle have any user data for DRAFTMODE, FLUSHOUTPUT, SETCOLORTABLE command
|
/* Note: Windows checks if the handle has any user data for the SETABORTPROC command
|
||||||
* ReactOS copy this behavior to be compatible with windows 2003
|
* ReactOS copies this behavior to be compatible with windows 2003
|
||||||
*/
|
*/
|
||||||
if ( (!GdiGetHandleUserData(hObject, (DWORD)Type, (PVOID) &pUserData)) ||
|
if (GdiGetDcAttr(hdc) == NULL)
|
||||||
(pUserData == NULL) )
|
|
||||||
{
|
{
|
||||||
GdiSetLastError(ERROR_INVALID_HANDLE);
|
GdiSetLastError(ERROR_INVALID_HANDLE);
|
||||||
retValue = FALSE;
|
retValue = FALSE;
|
||||||
|
@ -117,18 +117,17 @@ Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
|
||||||
|
|
||||||
case GETCOLORTABLE:
|
case GETCOLORTABLE:
|
||||||
retValue = GetSystemPaletteEntries(hdc, (UINT)*lpvInData, 1, (LPPALETTEENTRY)lpvOutData);
|
retValue = GetSystemPaletteEntries(hdc, (UINT)*lpvInData, 1, (LPPALETTEENTRY)lpvOutData);
|
||||||
if ( !retValue )
|
if (!retValue)
|
||||||
{
|
{
|
||||||
retValue = SP_ERROR;
|
retValue = SP_ERROR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ENDDOC:
|
case ENDDOC:
|
||||||
/* Note : Winodws check see if the handle have any user data for DRAFTMODE, FLUSHOUTPUT, SETCOLORTABLE command
|
/* Note: Windows checks if the handle has any user data for the ENDDOC command
|
||||||
* ReactOS copy this behavior to be compatible with windows 2003
|
* ReactOS copies this behavior to be compatible with windows 2003
|
||||||
*/
|
*/
|
||||||
if ( (!GdiGetHandleUserData(hObject, (DWORD)Type, (PVOID) &pUserData)) ||
|
if (GdiGetDcAttr(hdc) == NULL)
|
||||||
(pUserData == NULL) )
|
|
||||||
{
|
{
|
||||||
GdiSetLastError(ERROR_INVALID_HANDLE);
|
GdiSetLastError(ERROR_INVALID_HANDLE);
|
||||||
retValue = FALSE;
|
retValue = FALSE;
|
||||||
|
@ -136,14 +135,13 @@ Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
|
||||||
retValue = EndDoc(hdc);
|
retValue = EndDoc(hdc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case GETSCALINGFACTOR:
|
case GETSCALINGFACTOR:
|
||||||
/* Note GETSCALINGFACTOR is outdated have been replace by GetDeviceCaps */
|
/* Note GETSCALINGFACTOR is outdated have been replace by GetDeviceCaps */
|
||||||
if ( Type == GDI_OBJECT_TYPE_DC )
|
if (ulObjType == GDI_OBJECT_TYPE_DC)
|
||||||
{
|
{
|
||||||
if ( lpvOutData )
|
if (lpvOutData)
|
||||||
{
|
{
|
||||||
PPOINT ptr = (PPOINT) lpvOutData;
|
PPOINT ptr = (PPOINT)lpvOutData;
|
||||||
ptr->x = 0;
|
ptr->x = 0;
|
||||||
ptr->y = 0;
|
ptr->y = 0;
|
||||||
}
|
}
|
||||||
|
@ -152,46 +150,34 @@ Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GETEXTENDEDTEXTMETRICS:
|
case GETEXTENDEDTEXTMETRICS:
|
||||||
retValue = (int) GetETM( hdc, (EXTTEXTMETRIC *) lpvOutData) != 0;
|
retValue = GetETM(hdc, (EXTTEXTMETRIC *)lpvOutData) != 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STARTDOC:
|
case STARTDOC:
|
||||||
{
|
{
|
||||||
DOCINFOA *pUserDatalpdi;
|
DOCINFOA di;
|
||||||
DOCINFOA lpdi;
|
|
||||||
|
|
||||||
/* Note : Winodws check see if the handle have any user data for STARTDOC command
|
/* Note: Windows checks if the handle has any user data for the STARTDOC command
|
||||||
* ReactOS copy this behavior to be compatible with windows 2003
|
* ReactOS copies this behavior to be compatible with windows 2003
|
||||||
*/
|
*/
|
||||||
if ( (!GdiGetHandleUserData(hObject, (DWORD)Type, (PVOID) &pUserDatalpdi)) ||
|
if (GdiGetDcAttr(hdc) == NULL)
|
||||||
(pUserData == NULL) )
|
|
||||||
{
|
{
|
||||||
GdiSetLastError(ERROR_INVALID_HANDLE);
|
GdiSetLastError(ERROR_INVALID_HANDLE);
|
||||||
retValue = FALSE;
|
retValue = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpdi.cbSize = sizeof(DOCINFOA);
|
di.cbSize = sizeof(DOCINFOA);
|
||||||
|
di.lpszOutput = 0;
|
||||||
/* NOTE lpszOutput will be store in handle userdata */
|
di.lpszDatatype = 0;
|
||||||
lpdi.lpszOutput = 0;
|
di.fwType = 0;
|
||||||
|
di.lpszDocName = lpvInData;
|
||||||
lpdi.lpszDatatype = 0;
|
|
||||||
lpdi.fwType = 0;
|
|
||||||
lpdi.lpszDocName = lpvInData;
|
|
||||||
|
|
||||||
/* NOTE : doc for StartDocA/W at msdn http://msdn2.microsoft.com/en-us/library/ms535793(VS.85).aspx */
|
/* NOTE : doc for StartDocA/W at msdn http://msdn2.microsoft.com/en-us/library/ms535793(VS.85).aspx */
|
||||||
retValue = StartDocA(hdc, &lpdi);
|
retValue = StartDocA(hdc, &di);
|
||||||
|
|
||||||
/* StartDocA fail */
|
/* Check if StartDocA failed */
|
||||||
if (retValue < 0)
|
if (retValue < 0)
|
||||||
{
|
{
|
||||||
/* check see if outbuffer contain any data, if it does abort */
|
|
||||||
if ( (pUserDatalpdi->lpszOutput != 0) &&
|
|
||||||
( (*(WCHAR *)pUserDatalpdi->lpszOutput) != UNICODE_NULL) )
|
|
||||||
{
|
|
||||||
retValue = SP_APPABORT;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
retValue = GetLastError();
|
retValue = GetLastError();
|
||||||
|
|
||||||
|
@ -221,13 +207,9 @@ Escape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpvInData, LPVOID lpvOutData)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return retValue;
|
return retValue;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue