Akihiro Sagawa : gdi32: Move charset enumeration to helper function.
Alexandre Julliard
julliard at winehq.org
Mon Apr 4 10:10:56 CDT 2011
Module: wine
Branch: master
Commit: 6a404a3b5881f0e14cb7022d247fe89f1196a6fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6a404a3b5881f0e14cb7022d247fe89f1196a6fc
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Fri Apr 1 21:19:54 2011 +0900
gdi32: Move charset enumeration to helper function.
---
dlls/gdi32/freetype.c | 125 ++++++++++++++++++------------------------------
1 files changed, 47 insertions(+), 78 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 4582216..31fe4f2 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -4101,6 +4101,51 @@ static BOOL face_matches(Face *face, const LOGFONTW *lf)
return !strcmpiW(lf->lfFaceName, full_family_name);
}
+static BOOL enum_face_charsets(Face *face, FONTENUMPROCW proc, LPARAM lparam)
+{
+ ENUMLOGFONTEXW elf;
+ NEWTEXTMETRICEXW ntm;
+ DWORD type = 0;
+ FONTSIGNATURE fs;
+ CHARSETINFO csi;
+ int i;
+
+ GetEnumStructs(face, &elf, &ntm, &type);
+ for(i = 0; i < 32; i++) {
+ if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */
+ elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET;
+ strcpyW(elf.elfScript, OEM_DOSW);
+ i = 32; /* break out of loop */
+ } else if(!(face->fs.fsCsb[0] & (1L << i)))
+ continue;
+ else {
+ fs.fsCsb[0] = 1L << i;
+ fs.fsCsb[1] = 0;
+ if(!TranslateCharsetInfo(fs.fsCsb, &csi, TCI_SRCFONTSIG))
+ csi.ciCharset = DEFAULT_CHARSET;
+ if(i == 31) csi.ciCharset = SYMBOL_CHARSET;
+ if(csi.ciCharset != DEFAULT_CHARSET) {
+ elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = csi.ciCharset;
+ if(ElfScriptsW[i])
+ strcpyW(elf.elfScript, ElfScriptsW[i]);
+ else
+ FIXME("Unknown elfscript for bit %d\n", i);
+ }
+ }
+ TRACE("enuming face %s full %s style %s charset = %d type %d script %s it %d weight %d ntmflags %08x\n",
+ debugstr_w(elf.elfLogFont.lfFaceName),
+ debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle),
+ csi.ciCharset, type, debugstr_w(elf.elfScript),
+ elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight,
+ ntm.ntmTm.ntmFlags);
+ /* release section before callback (FIXME) */
+ LeaveCriticalSection( &freetype_cs );
+ if (!proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam)) return FALSE;
+ EnterCriticalSection( &freetype_cs );
+ }
+ return TRUE;
+}
+
/*************************************************************
* WineEngEnumFonts
*
@@ -4110,13 +4155,7 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam)
Family *family;
Face *face;
struct list *family_elem_ptr, *face_elem_ptr;
- ENUMLOGFONTEXW elf;
- NEWTEXTMETRICEXW ntm;
- DWORD type;
- FONTSIGNATURE fs;
- CHARSETINFO csi;
LOGFONTW lf;
- int i;
if (!plf)
{
@@ -4147,44 +4186,8 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam)
if(family_matches(family, plf)) {
LIST_FOR_EACH(face_elem_ptr, &family->faces) {
face = LIST_ENTRY(face_elem_ptr, Face, entry);
-
if (!face_matches(face, plf)) continue;
-
- GetEnumStructs(face, &elf, &ntm, &type);
- for(i = 0; i < 32; i++) {
- if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */
- elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET;
- strcpyW(elf.elfScript, OEM_DOSW);
- i = 32; /* break out of loop */
- } else if(!(face->fs.fsCsb[0] & (1L << i)))
- continue;
- else {
- fs.fsCsb[0] = 1L << i;
- fs.fsCsb[1] = 0;
- if(!TranslateCharsetInfo(fs.fsCsb, &csi,
- TCI_SRCFONTSIG))
- csi.ciCharset = DEFAULT_CHARSET;
- if(i == 31) csi.ciCharset = SYMBOL_CHARSET;
- if(csi.ciCharset != DEFAULT_CHARSET) {
- elf.elfLogFont.lfCharSet =
- ntm.ntmTm.tmCharSet = csi.ciCharset;
- if(ElfScriptsW[i])
- strcpyW(elf.elfScript, ElfScriptsW[i]);
- else
- FIXME("Unknown elfscript for bit %d\n", i);
- }
- }
- TRACE("enuming face %s full %s style %s charset %d type %d script %s it %d weight %d ntmflags %08x\n",
- debugstr_w(elf.elfLogFont.lfFaceName),
- debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle),
- csi.ciCharset, type, debugstr_w(elf.elfScript),
- elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight,
- ntm.ntmTm.ntmFlags);
- /* release section before callback (FIXME) */
- LeaveCriticalSection( &freetype_cs );
- if (!proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam)) return 0;
- EnterCriticalSection( &freetype_cs );
- }
+ if (!enum_face_charsets(face, proc, lparam)) return 0;
}
}
}
@@ -4193,41 +4196,7 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam)
family = LIST_ENTRY(family_elem_ptr, Family, entry);
face_elem_ptr = list_head(&family->faces);
face = LIST_ENTRY(face_elem_ptr, Face, entry);
- GetEnumStructs(face, &elf, &ntm, &type);
- for(i = 0; i < 32; i++) {
- if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */
- elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET;
- strcpyW(elf.elfScript, OEM_DOSW);
- i = 32; /* break out of loop */
- } else if(!(face->fs.fsCsb[0] & (1L << i)))
- continue;
- else {
- fs.fsCsb[0] = 1L << i;
- fs.fsCsb[1] = 0;
- if(!TranslateCharsetInfo(fs.fsCsb, &csi,
- TCI_SRCFONTSIG))
- csi.ciCharset = DEFAULT_CHARSET;
- if(i == 31) csi.ciCharset = SYMBOL_CHARSET;
- if(csi.ciCharset != DEFAULT_CHARSET) {
- elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet =
- csi.ciCharset;
- if(ElfScriptsW[i])
- strcpyW(elf.elfScript, ElfScriptsW[i]);
- else
- FIXME("Unknown elfscript for bit %d\n", i);
- }
- }
- TRACE("enuming face %s full %s style %s charset = %d type %d script %s it %d weight %d ntmflags %08x\n",
- debugstr_w(elf.elfLogFont.lfFaceName),
- debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle),
- csi.ciCharset, type, debugstr_w(elf.elfScript),
- elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight,
- ntm.ntmTm.ntmFlags);
- /* release section before callback (FIXME) */
- LeaveCriticalSection( &freetype_cs );
- if (!proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam)) return 0;
- EnterCriticalSection( &freetype_cs );
- }
+ if (!enum_face_charsets(face, proc, lparam)) return 0;
}
}
LeaveCriticalSection( &freetype_cs );
More information about the wine-cvs
mailing list