Update OffsetClipRgn, IntersectClipRect, GetRgnBox, moved SetDIBitsToDevice from...
authorJames Tabor <james.tabor@reactos.org>
Sat, 19 Apr 2008 02:20:36 +0000 (02:20 +0000)
committerJames Tabor <james.tabor@reactos.org>
Sat, 19 Apr 2008 02:20:36 +0000 (02:20 +0000)
svn path=/trunk/; revision=33030

reactos/dll/win32/gdi32/gdi32.def
reactos/dll/win32/gdi32/misc/stubs.c
reactos/dll/win32/gdi32/objects/bitmap.c
reactos/dll/win32/gdi32/objects/eng.c

index dfb14f5..9e4e229 100644 (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
index 214fcb0..0e1c9b5 100644 (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);
 }
 
 
index c6302d9..68b9cc7 100644 (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);
+}
+
+
index cd1e091..33c5000 100644 (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;
 }
 
 /*