Akihiro Sagawa : gdi32: Add a helper function to get chars in the range.

Alexandre Julliard julliard at winehq.org
Mon Jan 17 10:59:49 CST 2011


Module: wine
Branch: master
Commit: b9c41636bb47e092ddc1ee34c5f050cb5a6d62c3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b9c41636bb47e092ddc1ee34c5f050cb5a6d62c3

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Sun Jan 16 23:00:25 2011 +0900

gdi32: Add a helper function to get chars in the range.

---

 dlls/gdi32/font.c |   41 +++++++++++++++++++++++++++--------------
 1 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index cf29add..1489956 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -1553,6 +1553,31 @@ UINT WINAPI GetOutlineTextMetricsW(
     return ret;
 }
 
+static LPSTR FONT_GetCharsByRangeA(UINT firstChar, UINT lastChar, PINT pByteLen)
+{
+    INT i, count = lastChar - firstChar + 1;
+    UINT c;
+    LPSTR str;
+
+    if (count <= 0)
+        return NULL;
+
+    str = HeapAlloc(GetProcessHeap(), 0, count * 2 + 1);
+    if (str == NULL)
+        return NULL;
+
+    for(i = 0, c = firstChar; c <= lastChar; i++, c++)
+    {
+        if (c > 0xff)
+            str[i++] = (BYTE)(c >> 8);
+        str[i] = (BYTE)c;
+    }
+    str[i] = '\0';
+
+    *pByteLen = i;
+
+    return str;
+}
 
 /***********************************************************************
  *           GetCharWidthW      (GDI32.@)
@@ -2296,27 +2321,15 @@ BOOL WINAPI GetAspectRatioFilterEx( HDC hdc, LPSIZE pAspectRatio )
 BOOL WINAPI GetCharABCWidthsA(HDC hdc, UINT firstChar, UINT lastChar,
                                   LPABC abc )
 {
-    INT i, wlen, count = (INT)(lastChar - firstChar + 1);
-    UINT c;
+    INT i, wlen;
     LPSTR str;
     LPWSTR wstr;
     BOOL ret = TRUE;
 
-    if (count <= 0)
-        return FALSE;
-
-    str = HeapAlloc(GetProcessHeap(), 0, count * 2 + 1);
+    str = FONT_GetCharsByRangeA(firstChar, lastChar, &i);
     if (str == NULL)
         return FALSE;
 
-    for(i = 0, c = firstChar; c <= lastChar; i++, c++)
-    {
-        if (c > 0xff)
-            str[i++] = (BYTE)(c >> 8);
-        str[i] = (BYTE)c;
-    }
-    str[i] = '\0';
-
     wstr = FONT_mbtowc(hdc, str, i, &wlen, NULL);
     if (wstr == NULL)
     {




More information about the wine-cvs mailing list