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
*/
return NtGdiCreateBitmap(Width, Height, Planes, BitsPixel, (LPBYTE) pUnsafeBits);
}
-/*
- * @unimplemented
- */
-LPWSTR STDCALL
-EngGetDriverName(HDEV hdev)
-{
- UNIMPLEMENTED;
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
/*
* @unimplemented
*/
GetClipBox(HDC hdc,
LPRECT lprc)
{
- /* FIXME some part need be done in user mode */
return NtGdiGetAppClipBox(hdc, lprc);
}
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);
}
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,
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);
}
}
+/*
+ * @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;
}
/*