[ros-diffs] [jimtabor] 33030: Update OffsetClipRgn, IntersectClipRect, GetRgnBox, moved SetDIBitsToDevice from stubs and misc changes. Properly implement EngGetDriverName and EngGetPrinterDataFileName.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Sat Apr 19 04:20:37 CEST 2008


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?rev=33030&r1=33029&r2=33030&view=diff
==============================================================================
--- 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 at 4
 GetTextCharacterExtra at 4
 GetTextCharset at 4
-GetTextCharsetInfo at 12
+GetTextCharsetInfo at 12=NtGdiGetTextCharsetInfo at 12
 GetTextColor at 4
 GetTextExtentExPointA at 28
 GetTextExtentExPointI at 28

Modified: trunk/reactos/dll/win32/gdi32/misc/stubs.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/misc/stubs.c?rev=33030&r1=33029&r2=33030&view=diff
==============================================================================
--- 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/bitmap.c?rev=33030&r1=33029&r2=33030&view=diff
==============================================================================
--- 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/eng.c?rev=33030&r1=33029&r2=33030&view=diff
==============================================================================
--- 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;
 }
 
 /*



More information about the Ros-diffs mailing list