[WIN32SS][FONT] Fix font metrics (#713)
[reactos.git] / win32ss / gdi / ntgdi / text.c
index 31dcbe2..ec0503f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * PROJECT:         ReactOS win32 kernel mode subsystem
  * LICENSE:         GPL - See COPYING in the top level directory
- * FILE:            subsystems/win32/win32k/objects/text.c
+ * FILE:            win32ss/gdi/ntgdi/text.c
  * PURPOSE:         Text/Font
  * PROGRAMMER:
  */
 
 /** Functions *****************************************************************/
 
+BOOL FASTCALL
+GreTextOutW(
+    HDC  hdc,
+    int  nXStart,
+    int  nYStart,
+    LPCWSTR  lpString,
+    int  cchString)
+{
+    return GreExtTextOutW(hdc, nXStart, nYStart, 0, NULL, lpString, cchString, NULL, 0);
+}
+
 /*
    flOpts :
    GetTextExtentPoint32W = 0
@@ -24,7 +35,7 @@ BOOL
 FASTCALL
 GreGetTextExtentW(
     HDC hDC,
-    LPWSTR lpwsz,
+    LPCWSTR lpwsz,
     INT cwc,
     LPSIZE psize,
     UINT flOpts)
@@ -81,7 +92,7 @@ BOOL
 FASTCALL
 GreGetTextExtentExW(
     HDC hDC,
-    LPWSTR String,
+    LPCWSTR String,
     ULONG Count,
     ULONG MaxExtent,
     PULONG Fit,
@@ -135,6 +146,18 @@ GreGetTextExtentExW(
     return Result;
 }
 
+BOOL 
+WINAPI
+GreGetTextMetricsW(
+    _In_  HDC hdc,
+    _Out_ LPTEXTMETRICW lptm)
+{
+   TMW_INTERNAL tmwi;
+   if (!ftGdiGetTextMetricsW(hdc, &tmwi)) return FALSE;
+   *lptm = tmwi.TextMetric;
+   return TRUE;
+}
+
 DWORD
 APIENTRY
 NtGdiGetCharSet(HDC hDC)
@@ -473,7 +496,8 @@ NtGdiGetTextFaceW(
     HFONT hFont;
     PTEXTOBJ TextObj;
     NTSTATUS Status;
-    INT fLen, ret;
+    SIZE_T fLen;
+    INT ret;
 
     /* FIXME: Handle bAliasName */
 
@@ -489,12 +513,12 @@ NtGdiGetTextFaceW(
 
     TextObj = RealizeFontInit(hFont);
     ASSERT(TextObj != NULL);
-    fLen = wcslen(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName) + 1;
+    fLen = wcslen(TextObj->FaceName) + 1;
 
     if (FaceName != NULL)
     {
         Count = min(Count, fLen);
-        Status = MmCopyToCaller(FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName, Count * sizeof(WCHAR));
+        Status = MmCopyToCaller(FaceName, TextObj->FaceName, Count * sizeof(WCHAR));
         if (!NT_SUCCESS(Status))
         {
             TEXTOBJ_UnlockText(TextObj);
@@ -523,11 +547,9 @@ APIENTRY
 NtGdiGetTextMetricsW(
     IN HDC hDC,
     OUT TMW_INTERNAL * pUnsafeTmwi,
-    IN ULONG cj
-)
+    IN ULONG cj)
 {
     TMW_INTERNAL Tmwi;
-    NTSTATUS Status = STATUS_SUCCESS;
 
     if ( cj <= sizeof(TMW_INTERNAL) )
     {
@@ -540,15 +562,11 @@ NtGdiGetTextMetricsW(
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                Status = _SEH2_GetExceptionCode();
+                SetLastNtError(_SEH2_GetExceptionCode());
+                _SEH2_YIELD(return FALSE);
             }
             _SEH2_END
 
-            if (!NT_SUCCESS(Status))
-            {
-                SetLastNtError(Status);
-                return FALSE;
-            }
             return TRUE;
         }
     }