Update OffsetClipRgn, IntersectClipRect, GetRgnBox, moved SetDIBitsToDevice from stubs and misc changes. Properly implement EngGetDriverName and EngGetPrinterDataFileName.

svn path=/trunk/; revision=33030
This commit is contained in:
James Tabor 2008-04-19 02:20:36 +00:00
parent 96f8e3dc83
commit 3c7ef0d991
4 changed files with 131 additions and 72 deletions

View file

@ -436,7 +436,7 @@ GetSystemPaletteUse@4=NtGdiGetSystemPaletteUse@4
GetTextAlign@4
GetTextCharacterExtra@4
GetTextCharset@4
GetTextCharsetInfo@12
GetTextCharsetInfo@12=NtGdiGetTextCharsetInfo@12
GetTextColor@4
GetTextExtentExPointA@28
GetTextExtentExPointI@28

View file

@ -46,44 +46,6 @@ StretchDIBits(HDC hdc,
nSrcWidth, nSrcHeight, (LPBYTE)lpBits, (LPBITMAPINFO)lpBitsInfo, (DWORD)iUsage, dwRop, 0, 0, NULL);
}
/*
* @implemented
*
*/
INT
STDCALL
SetDIBitsToDevice(
HDC hDC,
int XDest,
int YDest,
DWORD Width,
DWORD Height,
int XSrc,
int YSrc,
UINT StartScan,
UINT ScanLines,
CONST VOID *Bits,
CONST BITMAPINFO *lpbmi,
UINT ColorUse)
{
return NtGdiSetDIBitsToDeviceInternal(hDC,
XDest,
YDest,
Width,
Height,
XSrc,
YSrc,
StartScan,
ScanLines,
(LPBYTE)Bits,
(LPBITMAPINFO)lpbmi,
ColorUse,
lpbmi->bmiHeader.biSizeImage,
lpbmi->bmiHeader.biSize,
FALSE,
NULL);
}
/*
* @unimplemented
*/
@ -1977,17 +1939,6 @@ CreateBitmap(INT Width,
return NtGdiCreateBitmap(Width, Height, Planes, BitsPixel, (LPBYTE) pUnsafeBits);
}
/*
* @unimplemented
*/
LPWSTR STDCALL
EngGetDriverName(HDEV hdev)
{
UNIMPLEMENTED;
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return 0;
}
/*
* @unimplemented
*/
@ -2179,7 +2130,6 @@ STDCALL
GetClipBox(HDC hdc,
LPRECT lprc)
{
/* FIXME some part need be done in user mode */
return NtGdiGetAppClipBox(hdc, lprc);
}
@ -2231,8 +2181,25 @@ STDCALL
GetRgnBox(HRGN hrgn,
LPRECT prcOut)
{
/* FIXME some stuff need be done in user mode */
return NtGdiGetRgnBox(hrgn, prcOut);
#if 0
PRGN_ATTR Rgn_Attr;
if (!GdiGetHandleUserData((HGDIOBJ) hRgn, GDI_OBJECT_TYPE_REGION, (PVOID) &Rgn_Attr))
return NtGdiGetRgnBox(hrgn, prcOut);
if (Rgn_Attr->Flags == NULLREGION)
{
prcOut->left = 0;
prcOut->top = 0;
prcOut->right = 0;
prcOut->bottom = 0;
}
else
{
if (Rgn_Attr->Flags != SIMPLEREGION) return NtGdiGetRgnBox(hrgn, prcOut);
*prcOut = Rgn_Attr->Rect;
}
return Rgn_Attr->Flags;
#endif
return NtGdiGetRgnBox(hrgn, prcOut);
}
@ -2250,19 +2217,9 @@ OffsetRgn( HRGN hrgn,
return NtGdiOffsetRgn(hrgn,nXOffset,nYOffset);
}
INT
STDCALL
GetTextCharsetInfo(HDC hdc,
LPFONTSIGNATURE lpSig,
DWORD dwFlags)
{
/* FIXME some part are done in user mode */
return NtGdiGetTextCharsetInfo(hdc, lpSig, dwFlags);
}
/*
* @implemented
*/
INT
STDCALL
IntersectClipRect(HDC hdc,
@ -2271,18 +2228,59 @@ IntersectClipRect(HDC hdc,
int nRightRect,
int nBottomRect)
{
/* FIXME some part are done in user mode */
#if 0
// Handle something other than a normal dc object.
if (GDI_HANDLE_GET_TYPE(hdc) != GDI_OBJECT_TYPE_DC)
{
if (GDI_HANDLE_GET_TYPE(hdc) == GDI_OBJECT_TYPE_METADC)
return MFDRV_IntersectClipRect( hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
else
{
PLDC pLDC = GdiGetLDC(hdc);
if ( pLDC )
{
if (pLDC->iType != LDC_EMFLDC || EMFDRV_IntersectClipRect( hdc, nLeftRect, nTopRect, nRightRect, nBottomRect))
return NtGdiIntersectClipRect(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
}
else
SetLastError(ERROR_INVALID_HANDLE);
return 0;
}
}
#endif
return NtGdiIntersectClipRect(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
}
/*
* @implemented
*/
INT
STDCALL
OffsetClipRgn(HDC hdc,
int nXOffset,
int nYOffset)
{
/* FIXME some part are done in user mode */
return NtGdiOffsetClipRgn( hdc, nXOffset, nYOffset);
#if 0
// Handle something other than a normal dc object.
if (GDI_HANDLE_GET_TYPE(hdc) != GDI_OBJECT_TYPE_DC)
{
if (GDI_HANDLE_GET_TYPE(hdc) == GDI_OBJECT_TYPE_METADC)
return MFDRV_OffsetClipRgn( hdc, nXOffset, nYOffset );
else
{
PLDC pLDC = GdiGetLDC(hdc);
if ( !pLDC )
{
SetLastError(ERROR_INVALID_HANDLE);
return 0;
}
if (pLDC->iType == LDC_EMFLDC && !EMFDRV_OffsetClipRgn( hdc, nXOffset, nYOffset ))
return 0;
return NtGdiOffsetClipRgn( hdc, nXOffset, nYOffset);
}
}
#endif
return NtGdiOffsetClipRgn( hdc, nXOffset, nYOffset);
}

View file

@ -381,10 +381,49 @@ SetDIBits(HDC hDC,
}
if ( newDC )
DeleteDC((HDC)SavehDC);
DeleteDC(SavehDC);
else
RestoreDC((HDC)SavehDC, -1);
RestoreDC(SavehDC, -1);
return LinesCopied;
}
/*
* @implemented
*
*/
INT
STDCALL
SetDIBitsToDevice(
HDC hDC,
int XDest,
int YDest,
DWORD Width,
DWORD Height,
int XSrc,
int YSrc,
UINT StartScan,
UINT ScanLines,
CONST VOID *Bits,
CONST BITMAPINFO *lpbmi,
UINT ColorUse)
{
return NtGdiSetDIBitsToDeviceInternal(hDC,
XDest,
YDest,
Width,
Height,
XSrc,
YSrc,
StartScan,
ScanLines,
(LPBYTE)Bits,
(LPBITMAPINFO)lpbmi,
ColorUse,
lpbmi->bmiHeader.biSizeImage,
lpbmi->bmiHeader.biSize,
FALSE,
NULL);
}

View file

@ -147,13 +147,35 @@ EngGetCurrentCodePage( OUT PUSHORT OemCodePage,
}
/*
* @implemented
*/
LPWSTR STDCALL
EngGetDriverName(HDEV hdev)
{
// DHPDEV from NtGdiGetDhpdev must be from print driver.
PDRIVER_INFO_2W pDrvInfo2 = (PDRIVER_INFO_2W)NtGdiGetDhpdev(hdev);
if (pDrvInfo2->cVersion != 0xFEDCBA98 ) // Init mask for ver 2+
{
PDRIVER_INFO_1W pDrvInfo1 = (PDRIVER_INFO_1W) pDrvInfo2;
return pDrvInfo1->pName;
}
return pDrvInfo2->pDriverPath;
}
/*
* @implemented
*/
LPWSTR STDCALL
EngGetPrinterDataFileName(HDEV hdev)
{
return EngGetDriverName(hdev);
PDRIVER_INFO_2W pDrvInfo2 = (PDRIVER_INFO_2W)NtGdiGetDhpdev(hdev);
if (pDrvInfo2->cVersion != 0xFEDCBA98 )
{
PDRIVER_INFO_1W pDrvInfo1 = (PDRIVER_INFO_1W) pDrvInfo2;
return pDrvInfo1->pName;
}
return pDrvInfo2->pDataFile;
}
/*