Commit in reactos/subsys/win32k on MAIN
include/intgdi.h+131.17 -> 1.18
objects/dc.c+29-191.151 -> 1.152
       /print.c+28-31.24 -> 1.25
       /text.c+18-131.113 -> 1.114
+88-35
4 modified files
BUGFIX: NtGdiGetDeviceCaps() called NtGdiEscape() with hDC when it already had it locked.
BUGFIX: fixed condition surrounding failed ASSERT in NtGdiGetTextExtentPoint32().

reactos/subsys/win32k/include
intgdi.h 1.17 -> 1.18
diff -u -r1.17 -r1.18
--- intgdi.h	12 Dec 2004 01:40:37 -0000	1.17
+++ intgdi.h	12 Dec 2004 21:58:42 -0000	1.18
@@ -179,5 +179,18 @@
 BOOL FASTCALL
 IntGetSysColors(COLORREF *Colors, UINT nColors);
 
+/* Other Stuff */
+
+INT FASTCALL
+IntGdiGetDeviceCaps(PDC dc, INT Index);
+
+INT
+FASTCALL
+IntGdiEscape(PDC    dc,
+             INT    Escape,
+             INT    InSize,
+             LPCSTR InData,
+             LPVOID OutData);
+
 #endif /* _WIN32K_INTGDI_H */
 

reactos/subsys/win32k/objects
dc.c 1.151 -> 1.152
diff -u -r1.151 -r1.152
--- dc.c	12 Dec 2004 21:25:05 -0000	1.151
+++ dc.c	12 Dec 2004 21:58:42 -0000	1.152
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: dc.c,v 1.151 2004/12/12 21:25:05 weiden Exp $
+/* $Id: dc.c,v 1.152 2004/12/12 21:58:42 royce Exp $
  *
  * DC.C - Device context functions
  *
@@ -1269,21 +1269,12 @@
     SetLastWin32Error(ERROR_INVALID_HANDLE);
 }
 
-INT STDCALL
-NtGdiGetDeviceCaps(HDC  hDC,
-                  INT  Index)
+INT FASTCALL
+IntGdiGetDeviceCaps(PDC dc, INT Index)
 {
-  PDC  dc;
-  INT  ret;
+  INT ret;
   POINT  pt;
 
-  dc = DC_LockDc(hDC);
-  if (dc == NULL)
-  {
-    SetLastWin32Error(ERROR_INVALID_HANDLE);
-    return 0;
-  }
-
   /* Retrieve capability */
   switch (Index)
   {
@@ -1376,7 +1367,7 @@
       break;
 
     case PHYSICALWIDTH:
-      if(NtGdiEscape(hDC, GETPHYSPAGESIZE, 0, NULL, (LPVOID)&pt) > 0)
+      if(IntGdiEscape(dc, GETPHYSPAGESIZE, 0, NULL, (LPVOID)&pt) > 0)
       {
         ret = pt.x;
       }
@@ -1387,7 +1378,7 @@
       break;
 
     case PHYSICALHEIGHT:
-      if(NtGdiEscape(hDC, GETPHYSPAGESIZE, 0, NULL, (LPVOID)&pt) > 0)
+      if(IntGdiEscape(dc, GETPHYSPAGESIZE, 0, NULL, (LPVOID)&pt) > 0)
       {
         ret = pt.y;
       }
@@ -1398,7 +1389,7 @@
       break;
 
     case PHYSICALOFFSETX:
-      if(NtGdiEscape(hDC, GETPRINTINGOFFSET, 0, NULL, (LPVOID)&pt) > 0)
+      if(IntGdiEscape(dc, GETPRINTINGOFFSET, 0, NULL, (LPVOID)&pt) > 0)
       {
         ret = pt.x;
       }
@@ -1409,7 +1400,7 @@
       break;
 
     case PHYSICALOFFSETY:
-      if(NtGdiEscape(hDC, GETPRINTINGOFFSET, 0, NULL, (LPVOID)&pt) > 0)
+      if(IntGdiEscape(dc, GETPRINTINGOFFSET, 0, NULL, (LPVOID)&pt) > 0)
       {
         ret = pt.y;
       }
@@ -1424,7 +1415,7 @@
       break;
 
     case SCALINGFACTORX:
-      if(NtGdiEscape(hDC, GETSCALINGFACTOR, 0, NULL, (LPVOID)&pt) > 0)
+      if(IntGdiEscape(dc, GETSCALINGFACTOR, 0, NULL, (LPVOID)&pt) > 0)
       {
         ret = pt.x;
       }
@@ -1435,7 +1426,7 @@
       break;
 
     case SCALINGFACTORY:
-      if(NtGdiEscape(hDC, GETSCALINGFACTOR, 0, NULL, (LPVOID)&pt) > 0)
+      if(IntGdiEscape(dc, GETSCALINGFACTOR, 0, NULL, (LPVOID)&pt) > 0)
       {
         ret = pt.y;
       }
@@ -1470,6 +1461,25 @@
       break;
   }
 
+  return ret;
+}
+
+INT STDCALL
+NtGdiGetDeviceCaps(HDC  hDC,
+                  INT  Index)
+{
+  PDC  dc;
+  INT  ret;
+
+  dc = DC_LockDc(hDC);
+  if (dc == NULL)
+  {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
+    return 0;
+  }
+
+  ret = IntGdiGetDeviceCaps(dc, Index);
+
   DPRINT("(%04x,%d): returning %d\n", hDC, Index, ret);
 
   DC_UnlockDc( hDC );

reactos/subsys/win32k/objects
print.c 1.24 -> 1.25
diff -u -r1.24 -r1.25
--- print.c	12 Dec 2004 01:40:38 -0000	1.24
+++ print.c	12 Dec 2004 21:58:42 -0000	1.25
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: print.c,v 1.24 2004/12/12 01:40:38 weiden Exp $ */
+/* $Id: print.c,v 1.25 2004/12/12 21:58:42 royce Exp $ */
 #include <w32k.h>
 
 INT
@@ -44,6 +44,18 @@
 }
 
 INT
+FASTCALL
+IntGdiEscape(PDC    dc,
+             INT    Escape,
+             INT    InSize,
+             LPCSTR InData,
+             LPVOID OutData)
+{
+  UNIMPLEMENTED;
+  return 0;
+}
+
+INT
 STDCALL
 NtGdiEscape(HDC  hDC,
                 INT  Escape,
@@ -51,8 +63,21 @@
                 LPCSTR  InData,
                 LPVOID  OutData)
 {
-  UNIMPLEMENTED;
-  return 0;
+  PDC dc;
+  INT ret;
+
+  dc = DC_LockDc(hDC);
+  if (dc == NULL)
+  {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
+    return 0;
+  }
+
+  /* TODO FIXME - don't pass umode buffer to an Int function */
+  ret = IntGdiEscape(dc, Escape, InSize, InData, OutData);
+
+  DC_UnlockDc( hDC );
+  return ret;
 }
 
 INT

reactos/subsys/win32k/objects
text.c 1.113 -> 1.114
diff -u -r1.113 -r1.114
--- text.c	12 Dec 2004 01:40:38 -0000	1.113
+++ text.c	12 Dec 2004 21:58:42 -0000	1.114
@@ -22,7 +22,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: text.c,v 1.113 2004/12/12 01:40:38 weiden Exp $ */
+/* $Id: text.c,v 1.114 2004/12/12 21:58:42 royce Exp $ */
 #include <w32k.h>
 
 #include <ft2build.h>
@@ -2131,7 +2131,7 @@
 
 static BOOL
 FASTCALL
-TextIntGetTextExtentPoint(HDC hDC,
+TextIntGetTextExtentPoint(PDC dc,
                           PTEXTOBJ TextObj,
                           LPCWSTR String,
                           int Count,
@@ -2241,7 +2241,7 @@
 
   Size->cx = (TotalWidth + 32) >> 6;
   Size->cy = (TextObj->logfont.lfHeight < 0 ? - TextObj->logfont.lfHeight : TextObj->logfont.lfHeight);
-  Size->cy = EngMulDiv(Size->cy, NtGdiGetDeviceCaps(hDC, LOGPIXELSY), 72);
+  Size->cy = EngMulDiv(Size->cy, IntGdiGetDeviceCaps(dc, LOGPIXELSY), 72);
 
   return TRUE;
 }
@@ -2329,11 +2329,15 @@
       return FALSE;
     }
   TextObj = TEXTOBJ_LockText(dc->w.hFont);
-  /* FIXME - TextObj can be NULL!!!! Handle this case!!! */
-  DC_UnlockDc(hDC);
-  Result = TextIntGetTextExtentPoint(hDC, TextObj, String, Count, MaxExtent,
+  if ( TextObj )
+  {
+    Result = TextIntGetTextExtentPoint(dc, TextObj, String, Count, MaxExtent,
                                      NULL == UnsafeFit ? NULL : &Fit, Dx, &Size);
+  }
+  else
+    Result = FALSE;
   TEXTOBJ_UnlockText(dc->w.hFont);
+  DC_UnlockDc(hDC);
 
   ExFreePool(String);
   if (! Result)
@@ -2452,13 +2456,14 @@
       return FALSE;
     }
   TextObj = TEXTOBJ_LockText(dc->w.hFont);
-  /* FIXME - TextObj can be NULL!!! Handle this case!!! */
-  DC_UnlockDc(hDC);
-  Result = TextIntGetTextExtentPoint (
-	  hDC, TextObj, String, Count, 0, NULL, NULL, &Size);
-  dc = DC_LockDc(hDC);
-  ASSERT(dc); // it succeeded earlier, it should now, too
-  TEXTOBJ_UnlockText(dc->w.hFont);
+  if ( TextObj != NULL )
+  {
+    Result = TextIntGetTextExtentPoint (
+      dc, TextObj, String, Count, 0, NULL, NULL, &Size);
+    TEXTOBJ_UnlockText(dc->w.hFont);
+  }
+  else
+    Result = FALSE;
   DC_UnlockDc(hDC);
 
   ExFreePool(String);
CVSspam 0.2.8