Module: wine Branch: master Commit: e86519c9b36ea78c3904aac3ceb698d06b864516 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e86519c9b36ea78c3904aac3ce...
Author: Kusanagi Kouichi slash@ac.auone-net.jp Date: Thu Mar 8 22:32:49 2012 +0900
gdi32: Add a helper function to find font link.
---
dlls/gdi32/freetype.c | 102 +++++++++++++++++++++++------------------------- 1 files changed, 49 insertions(+), 53 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 8a0c096..3056462 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -1978,6 +1978,19 @@ static const struct font_links_defaults_list };
+static SYSTEM_LINKS *find_font_link(const WCHAR *name) +{ + SYSTEM_LINKS *font_link; + + LIST_FOR_EACH_ENTRY(font_link, &system_links, SYSTEM_LINKS, entry) + { + if(!strcmpiW(font_link->font_name, name)) + return font_link; + } + + return NULL; +} + static void populate_system_links(const WCHAR *name, const WCHAR *const *values) { const WCHAR *value; @@ -1992,7 +2005,6 @@ static void populate_system_links(const WCHAR *name, const WCHAR *const *values) if (values) { SYSTEM_LINKS *font_link; - BOOL existing = FALSE;
memset(&fs, 0, sizeof(fs)); psub = get_font_subst(&font_subst_list, name, -1); @@ -2003,20 +2015,13 @@ static void populate_system_links(const WCHAR *name, const WCHAR *const *values) return; }
- LIST_FOR_EACH_ENTRY(font_link, &system_links, SYSTEM_LINKS, entry) - { - if(!strcmpiW(font_link->font_name, name)) - { - existing = TRUE; - break; - } - } - - if (!existing) + font_link = find_font_link(name); + if (font_link == NULL) { font_link = HeapAlloc(GetProcessHeap(), 0, sizeof(*font_link)); font_link->font_name = strdupW(name); list_init(&font_link->links); + list_add_tail(&system_links, &font_link->entry); }
for (i = 0; values[i] != NULL; i++) @@ -2076,8 +2081,6 @@ static void populate_system_links(const WCHAR *name, const WCHAR *const *values) face->fs_links = fs; } } - if (!existing) - list_add_tail(&system_links, &font_link->entry); } }
@@ -2225,22 +2228,19 @@ skip_internal: TRACE("Found Tahoma in %s index %ld\n", child_font->face->file, child_font->face->face_index); list_add_tail(&system_font_link->links, &child_font->entry); } - LIST_FOR_EACH_ENTRY(font_link, &system_links, SYSTEM_LINKS, entry) + font_link = find_font_link(Tahoma); + if (font_link != NULL) { - if(!strcmpiW(font_link->font_name, Tahoma)) + CHILD_FONT *font_link_entry; + LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) { - CHILD_FONT *font_link_entry; - LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) - { - CHILD_FONT *new_child; - new_child = HeapAlloc(GetProcessHeap(), 0, sizeof(*new_child)); - new_child->face = font_link_entry->face; - new_child->font = NULL; - fs.fsCsb[0] |= font_link_entry->face->fs.fsCsb[0]; - fs.fsCsb[1] |= font_link_entry->face->fs.fsCsb[1]; - list_add_tail(&system_font_link->links, &new_child->entry); - } - break; + CHILD_FONT *new_child; + new_child = HeapAlloc(GetProcessHeap(), 0, sizeof(*new_child)); + new_child->face = font_link_entry->face; + new_child->font = NULL; + fs.fsCsb[0] |= font_link_entry->face->fs.fsCsb[0]; + fs.fsCsb[1] |= font_link_entry->face->fs.fsCsb[1]; + list_add_tail(&system_font_link->links, &new_child->entry); } } family = find_family_from_name(system_font_link->font_name); @@ -3793,22 +3793,19 @@ static BOOL create_child_font_list(GdiFont *font)
psub = get_font_subst(&font_subst_list, font->name, -1); font_name = psub ? psub->to.name : font->name; - LIST_FOR_EACH_ENTRY(font_link, &system_links, SYSTEM_LINKS, entry) + font_link = find_font_link(font_name); + if (font_link != NULL) { - if(!strcmpiW(font_link->font_name, font_name)) + TRACE("found entry in system list\n"); + LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) { - TRACE("found entry in system list\n"); - LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) - { - new_child = HeapAlloc(GetProcessHeap(), 0, sizeof(*new_child)); - new_child->face = font_link_entry->face; - new_child->font = NULL; - list_add_tail(&font->child_fonts, &new_child->entry); - TRACE("font %s %ld\n", debugstr_a(new_child->face->file), new_child->face->face_index); - } - ret = TRUE; - break; + new_child = HeapAlloc(GetProcessHeap(), 0, sizeof(*new_child)); + new_child->face = font_link_entry->face; + new_child->font = NULL; + list_add_tail(&font->child_fonts, &new_child->entry); + TRACE("font %s %ld\n", debugstr_a(new_child->face->file), new_child->face->face_index); } + ret = TRUE; } /* * if not SYMBOL or OEM then we also get all the fonts for Microsoft @@ -3817,23 +3814,22 @@ static BOOL create_child_font_list(GdiFont *font) if (use_default_fallback && font->charset != SYMBOL_CHARSET && font->charset != OEM_CHARSET && strcmpiW(font_name,szDefaultFallbackLink) != 0) - LIST_FOR_EACH_ENTRY(font_link, &system_links, SYSTEM_LINKS, entry) + { + font_link = find_font_link(szDefaultFallbackLink); + if (font_link != NULL) { - if(!strcmpiW(font_link->font_name,szDefaultFallbackLink)) + TRACE("found entry in default fallback list\n"); + LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) { - TRACE("found entry in default fallback list\n"); - LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) - { - new_child = HeapAlloc(GetProcessHeap(), 0, sizeof(*new_child)); - new_child->face = font_link_entry->face; - new_child->font = NULL; - list_add_tail(&font->child_fonts, &new_child->entry); - TRACE("font %s %ld\n", debugstr_a(new_child->face->file), new_child->face->face_index); - } - ret = TRUE; - break; + new_child = HeapAlloc(GetProcessHeap(), 0, sizeof(*new_child)); + new_child->face = font_link_entry->face; + new_child->font = NULL; + list_add_tail(&font->child_fonts, &new_child->entry); + TRACE("font %s %ld\n", debugstr_a(new_child->face->file), new_child->face->face_index); } + ret = TRUE; } + }
return ret; }