Author: jimtabor
Date: Fri Apr 18 21:20:36 2008
New Revision: 33030
URL:
http://svn.reactos.org/svn/reactos?rev=33030&view=rev
Log:
Update OffsetClipRgn, IntersectClipRect, GetRgnBox, moved SetDIBitsToDevice from stubs and
misc changes. Properly implement EngGetDriverName and EngGetPrinterDataFileName.
Modified:
trunk/reactos/dll/win32/gdi32/gdi32.def
trunk/reactos/dll/win32/gdi32/misc/stubs.c
trunk/reactos/dll/win32/gdi32/objects/bitmap.c
trunk/reactos/dll/win32/gdi32/objects/eng.c
Modified: trunk/reactos/dll/win32/gdi32/gdi32.def
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/gdi32.def?…
==============================================================================
--- trunk/reactos/dll/win32/gdi32/gdi32.def [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdi32/gdi32.def [iso-8859-1] Fri Apr 18 21:20:36 2008
@@ -436,7 +436,7 @@
GetTextAlign@4
GetTextCharacterExtra@4
GetTextCharset@4
-GetTextCharsetInfo@12
+GetTextCharsetInfo@12=NtGdiGetTextCharsetInfo@12
GetTextColor@4
GetTextExtentExPointA@28
GetTextExtentExPointI@28
Modified: trunk/reactos/dll/win32/gdi32/misc/stubs.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/misc/stubs…
==============================================================================
--- trunk/reactos/dll/win32/gdi32/misc/stubs.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdi32/misc/stubs.c [iso-8859-1] Fri Apr 18 21:20:36 2008
@@ -44,44 +44,6 @@
/* FIXME share memory */
return NtGdiStretchDIBitsInternal(hdc, XDest, YDest, nDestWidth, nDestHeight, XSrc,
YSrc,
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);
}
/*
@@ -1980,17 +1942,6 @@
/*
* @unimplemented
*/
-LPWSTR STDCALL
-EngGetDriverName(HDEV hdev)
-{
- UNIMPLEMENTED;
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
-/*
- * @unimplemented
- */
ULONG STDCALL
XLATEOBJ_iXlate(XLATEOBJ *XlateObj,
ULONG Color)
@@ -2179,7 +2130,6 @@
GetClipBox(HDC hdc,
LPRECT lprc)
{
- /* FIXME some part need be done in user mode */
return NtGdiGetAppClipBox(hdc, lprc);
}
@@ -2231,8 +2181,25 @@
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 @@
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 @@
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);
}
Modified: trunk/reactos/dll/win32/gdi32/objects/bitmap.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/bi…
==============================================================================
--- trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] Fri Apr 18 21:20:36 2008
@@ -381,10 +381,49 @@
}
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);
+}
+
+
Modified: trunk/reactos/dll/win32/gdi32/objects/eng.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/en…
==============================================================================
--- trunk/reactos/dll/win32/gdi32/objects/eng.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdi32/objects/eng.c [iso-8859-1] Fri Apr 18 21:20:36 2008
@@ -151,9 +151,31 @@
* @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;
}
/*