[ros-diffs] [jimtabor] 36869: - Plug in GetDeviceCaps for gdi.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Tue Oct 21 04:56:37 CEST 2008


Author: jimtabor
Date: Mon Oct 20 21:56:36 2008
New Revision: 36869

URL: http://svn.reactos.org/svn/reactos?rev=36869&view=rev
Log:
- Plug in GetDeviceCaps for gdi.

Modified:
    trunk/reactos/dll/win32/gdi32/misc/stubs.c
    trunk/reactos/dll/win32/gdi32/objects/dc.c

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=36869&r1=36868&r2=36869&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] Mon Oct 20 21:56:36 2008
@@ -2004,20 +2004,6 @@
     return FALSE;
 }
 
-
-/*
- * @implemented
- *
- */
-int
-STDCALL
-GetDeviceCaps(HDC hdc,
-              int i)
-{
-    /* FIXME some part need be done in user mode */
-    return NtGdiGetDeviceCaps(hdc,i);
-}
-
 /*
  * @implemented
  *

Modified: trunk/reactos/dll/win32/gdi32/objects/dc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/dc.c?rev=36869&r1=36868&r2=36869&view=diff
==============================================================================
--- trunk/reactos/dll/win32/gdi32/objects/dc.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdi32/objects/dc.c [iso-8859-1] Mon Oct 20 21:56:36 2008
@@ -465,6 +465,179 @@
     return  GetDCObject(hdc, uObjectType);
 }
 
+/*
+ * @implemented
+ *
+ */
+int
+STDCALL
+GetDeviceCaps(HDC hDC,
+              int i)
+{
+  PDC_ATTR Dc_Attr;
+  PLDC pLDC;
+  PDEVCAPS pDevCaps = GdiDevCaps; // Primary display device capabilities.
+  DPRINT("Device CAPS1\n");
+
+  if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)
+  {
+     if (GDI_HANDLE_GET_TYPE(hDC) == GDI_OBJECT_TYPE_METADC)
+     {
+        if ( i == TECHNOLOGY) return DT_METAFILE;
+        return 0;
+     }
+     else
+     {
+        pLDC = GdiGetLDC(hDC);
+        if ( !pLDC )
+        {
+           SetLastError(ERROR_INVALID_HANDLE);
+           return 0;
+        }
+        if (!(pLDC->Flags & LDC_DEVCAPS))
+        {
+           if (!NtGdiGetDeviceCapsAll(hDC, &pLDC->DevCaps))
+              SetLastError(ERROR_INVALID_PARAMETER);
+           pLDC->Flags |= LDC_DEVCAPS;
+        }
+        pDevCaps = &pLDC->DevCaps;
+     }
+  }
+  else
+  {
+     // HAX!!!!
+     // Due to winlogon process/thread mapping issues we have this hax!
+     //
+     return NtGdiGetDeviceCaps(hDC,i);
+
+     if (!GdiGetHandleUserData((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC, (PVOID) &Dc_Attr))
+        return 0;
+     if (!(Dc_Attr->ulDirty_ & DC_PRIMARY_DISPLAY) )
+        return NtGdiGetDeviceCaps(hDC,i);
+  }
+  DPRINT("Device CAPS2\n");
+  
+  switch (i)
+  {
+    case DRIVERVERSION:
+      return pDevCaps->ulVersion;
+
+    case TECHNOLOGY:
+      return pDevCaps->ulTechnology;
+
+    case HORZSIZE:
+      return pDevCaps->ulHorzSize;
+
+    case VERTSIZE:
+      return pDevCaps->ulVertSize;
+
+    case HORZRES:
+      return pDevCaps->ulHorzRes;
+
+    case VERTRES:
+      return pDevCaps->ulVertRes;
+
+    case LOGPIXELSX:
+      return pDevCaps->ulLogPixelsX;
+
+    case LOGPIXELSY:
+      return pDevCaps->ulLogPixelsY;
+
+    case BITSPIXEL:
+      return pDevCaps->ulBitsPixel;
+
+    case PLANES:
+      return pDevCaps->ulPlanes;
+
+    case NUMBRUSHES:
+      return -1;
+
+    case NUMPENS:
+      return pDevCaps->ulNumPens;
+
+    case NUMFONTS:
+      return pDevCaps->ulNumFonts;
+
+    case NUMCOLORS:
+      return pDevCaps->ulNumColors;
+
+    case ASPECTX:
+      return pDevCaps->ulAspectX;
+
+    case ASPECTY:
+      return pDevCaps->ulAspectY;
+
+    case ASPECTXY:
+      return pDevCaps->ulAspectXY;
+
+    case CLIPCAPS:
+      return CP_RECTANGLE;
+
+    case SIZEPALETTE:
+      return pDevCaps->ulSizePalette;
+
+    case NUMRESERVED:
+      return 20;
+
+    case COLORRES:
+      return pDevCaps->ulColorRes;
+
+    case DESKTOPVERTRES:
+      return pDevCaps->ulVertRes;
+
+    case DESKTOPHORZRES:
+      return pDevCaps->ulHorzRes;
+
+    case BLTALIGNMENT:
+      return pDevCaps->ulBltAlignment;
+
+    case SHADEBLENDCAPS:
+      return pDevCaps->ulShadeBlend;
+
+    case COLORMGMTCAPS:
+      return pDevCaps->ulColorMgmtCaps;
+
+    case PHYSICALWIDTH:
+      return pDevCaps->ulPhysicalWidth;
+
+    case PHYSICALHEIGHT:
+      return pDevCaps->ulPhysicalHeight;
+
+    case PHYSICALOFFSETX:
+      return pDevCaps->ulPhysicalOffsetX;
+
+    case PHYSICALOFFSETY:
+      return pDevCaps->ulPhysicalOffsetY;
+
+    case VREFRESH:
+      return pDevCaps->ulVRefresh;
+
+    case RASTERCAPS:
+      return pDevCaps->ulRasterCaps;
+
+    case CURVECAPS:
+      return (CC_CIRCLES | CC_PIE | CC_CHORD | CC_ELLIPSES | CC_WIDE |
+             CC_STYLED | CC_WIDESTYLED | CC_INTERIORS | CC_ROUNDRECT);
+
+    case LINECAPS:
+      return (LC_POLYLINE | LC_MARKER | LC_POLYMARKER | LC_WIDE |
+             LC_STYLED | LC_WIDESTYLED | LC_INTERIORS);
+
+    case POLYGONALCAPS:
+      return (PC_POLYGON | PC_RECTANGLE | PC_WINDPOLYGON | PC_SCANLINE |
+             PC_WIDE | PC_STYLED | PC_WIDESTYLED | PC_INTERIORS);
+
+    case TEXTCAPS:
+      return pDevCaps->ulTextCaps;
+
+    case PDEVICESIZE:
+    case SCALINGFACTORX:
+    case SCALINGFACTORY:
+    default:
+      return 0;
+  }
+  return 0;
+}
 
 /*
  * @implemented



More information about the Ros-diffs mailing list