Module: wine Branch: master Commit: 7ad330deef3a8e108ce6cc456b7721b8e3e506bb URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ad330deef3a8e108ce6cc456b...
Author: Huw Davies huw@codeweavers.com Date: Tue Mar 27 11:48:39 2012 +0100
gdi32: Add a helper to retrieve the family pointer.
---
dlls/gdi32/freetype.c | 59 +++++++++++++++++++++++++++++------------------- 1 files changed, 36 insertions(+), 23 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index e174921..1b38a8e 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -1520,6 +1520,41 @@ static void get_family_names( FT_Face ft_face, WCHAR **name, WCHAR **english, BO } }
+static Family *get_family( FT_Face ft_face, BOOL vertical ) +{ + Family *family; + WCHAR *name, *english_name; + + get_family_names( ft_face, &name, &english_name, vertical ); + + family = find_family_from_name( name ); + + if (!family) + { + family = HeapAlloc( GetProcessHeap(), 0, sizeof(*family) ); + family->FamilyName = strdupW( name ); + family->EnglishName = english_name ? strdupW( english_name ) : NULL; + list_init( &family->faces ); + family->replacement = &family->faces; + list_add_tail( &font_list, &family->entry ); + + if (english_name) + { + FontSubst *subst = HeapAlloc( GetProcessHeap(), 0, sizeof(*subst) ); + subst->from.name = strdupW( english_name ); + subst->from.charset = -1; + subst->to.name = strdupW( name ); + subst->to.charset = -1; + add_font_subst( &font_subst_list, subst, 0 ); + } + } + HeapFree( GetProcessHeap(), 0, name ); + HeapFree( GetProcessHeap(), 0, english_name ); + + return family; +} + + #define ADDFONT_EXTERNAL_FONT 0x01 #define ADDFONT_FORCE_BITMAP 0x02 #define ADDFONT_ADD_TO_CACHE 0x04 @@ -1533,7 +1568,6 @@ static void AddFaceToList(FT_Face ft_face, const char *file, void *font_data_ptr do { TT_OS2 *pOS2; TT_Header *pHeader; - WCHAR *family_name, *english_family; Face *face; struct list *face_elem_ptr; FT_WinFNT_HeaderRec winfnt_header; @@ -1545,28 +1579,7 @@ static void AddFaceToList(FT_Face ft_face, const char *file, void *font_data_ptr if(!FT_IS_SCALABLE(ft_face)) size = (My_FT_Bitmap_Size *)ft_face->available_sizes + bitmap_num;
- get_family_names( ft_face, &family_name, &english_family, vertical ); - - family = find_family_from_name( family_name ); - if(!family) { - family = HeapAlloc(GetProcessHeap(), 0, sizeof(*family)); - family->FamilyName = strdupW( family_name ); - family->EnglishName = english_family ? strdupW( english_family ) : NULL; - list_init(&family->faces); - family->replacement = &family->faces; - list_add_tail(&font_list, &family->entry); - - if(english_family) { - FontSubst *subst = HeapAlloc(GetProcessHeap(), 0, sizeof(*subst)); - subst->from.name = strdupW(english_family); - subst->from.charset = -1; - subst->to.name = strdupW(family_name); - subst->to.charset = -1; - add_font_subst(&font_subst_list, subst, 0); - } - } - HeapFree(GetProcessHeap(), 0, family_name); - HeapFree(GetProcessHeap(), 0, english_family); + family = get_family( ft_face, vertical );
StyleW = towstr(CP_ACP, ft_face->style_name);