Huw Davies : gdi32: Factor out the name table lookup into a separate function.
Alexandre Julliard
julliard at winehq.org
Thu Sep 18 07:56:09 CDT 2008
Module: wine
Branch: master
Commit: 2f8f3faccea200c467529b36a93cb4a46a224004
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2f8f3faccea200c467529b36a93cb4a46a224004
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Sep 18 12:23:08 2008 +0100
gdi32: Factor out the name table lookup into a separate function.
---
dlls/gdi32/freetype.c | 67 +++++++++++++++++++++++++++++++++++--------------
1 files changed, 48 insertions(+), 19 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index dcd60e3..145be9b 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -1026,11 +1026,19 @@ static void LoadSubstList(void)
}
}
-static WCHAR *get_familyname(FT_Face ft_face)
+
+/*****************************************************************
+ * get_name_table_entry
+ *
+ * Supply the platform, encoding, language and name ids in req
+ * and if the name exists the function will fill in the string
+ * and string_len members. The string is owned by FreeType so
+ * don't free it. Returns TRUE if the name is found else FALSE.
+ */
+static BOOL get_name_table_entry(FT_Face ft_face, FT_SfntName *req)
{
- WCHAR *family = NULL;
FT_SfntName name;
- FT_UInt num_names, name_index, i;
+ FT_UInt num_names, name_index;
if(FT_IS_SFNT(ft_face))
{
@@ -1040,28 +1048,49 @@ static WCHAR *get_familyname(FT_Face ft_face)
{
if(!pFT_Get_Sfnt_Name(ft_face, name_index, &name))
{
- if((name.name_id == TT_NAME_ID_FONT_FAMILY) &&
- (name.language_id == GetUserDefaultLCID()) &&
- (name.platform_id == TT_PLATFORM_MICROSOFT) &&
- (name.encoding_id == TT_MS_ID_UNICODE_CS))
+ if((name.platform_id == req->platform_id) &&
+ (name.encoding_id == req->encoding_id) &&
+ (name.language_id == req->language_id) &&
+ (name.name_id == req->name_id))
{
- /* String is not nul terminated and string_len is a byte length. */
- family = HeapAlloc(GetProcessHeap(), 0, name.string_len + 2);
- for(i = 0; i < name.string_len / 2; i++)
- {
- WORD *tmp = (WORD *)&name.string[i * 2];
- family[i] = GET_BE_WORD(*tmp);
- }
- family[i] = 0;
-
- TRACE("Got localised name %s\n", debugstr_w(family));
- return family;
+ req->string = name.string;
+ req->string_len = name.string_len;
+ return TRUE;
}
}
}
}
+ req->string = NULL;
+ req->string_len = 0;
+ return FALSE;
+}
- return NULL;
+static WCHAR *get_familyname(FT_Face ft_face)
+{
+ WCHAR *family = NULL;
+ FT_SfntName name;
+
+ name.platform_id = TT_PLATFORM_MICROSOFT;
+ name.encoding_id = TT_MS_ID_UNICODE_CS;
+ name.language_id = GetUserDefaultLCID();
+ name.name_id = TT_NAME_ID_FONT_FAMILY;
+
+ if(get_name_table_entry(ft_face, &name))
+ {
+ int i;
+
+ /* String is not nul terminated and string_len is a byte length. */
+ family = HeapAlloc(GetProcessHeap(), 0, name.string_len + 2);
+ for(i = 0; i < name.string_len / 2; i++)
+ {
+ WORD *tmp = (WORD *)&name.string[i * 2];
+ family[i] = GET_BE_WORD(*tmp);
+ }
+ family[i] = 0;
+ TRACE("Got localised name %s\n", debugstr_w(family));
+ }
+
+ return family;
}
More information about the wine-cvs
mailing list