Another symbol font fix
Rein Klazes
rklazes at xs4all.nl
Wed Oct 29 13:23:16 CST 2003
Hi,
There are a couple of non-MS TT fonts on my system that only display
rectangles in win98's charmap.exe. Wine recognize these to have a SYMBOL
character set but Windows (win2k) does not. So libfreetype returning a
character mapping ft_encoding_symbol is not enough, I propose testing
the 0xf000 character offset that is assumed in other parts of the code.
Tested to work for libfreetype 2.0.9 and 2.1.5
Changelog:
dlls/gdi : freetype.c
Don't include a SYMBOL_CHARSET character set unless there is a
0xf000 character mapping offset.
Rein.
--
Rein Klazes
rklazes at xs4all.nl
-------------- next part --------------
--- wine/dlls/gdi/freetype.c 2003-10-28 01:08:28.000000000 +0100
+++ mywine/dlls/gdi/freetype.c 2003-10-29 20:16:26.000000000 +0100
@@ -93,6 +93,7 @@
MAKE_FUNCPTR(FT_Vector_Unit);
MAKE_FUNCPTR(FT_Done_Face);
MAKE_FUNCPTR(FT_Get_Char_Index);
+MAKE_FUNCPTR(FT_Get_First_Char);
MAKE_FUNCPTR(FT_Get_Sfnt_Table);
MAKE_FUNCPTR(FT_Init_FreeType);
MAKE_FUNCPTR(FT_Load_Glyph);
@@ -103,6 +104,7 @@
MAKE_FUNCPTR(FT_Outline_Transform);
MAKE_FUNCPTR(FT_Outline_Translate);
MAKE_FUNCPTR(FT_Select_Charmap);
+MAKE_FUNCPTR(FT_Set_Charmap);
MAKE_FUNCPTR(FT_Set_Pixel_Sizes);
MAKE_FUNCPTR(FT_Vector_Transform);
#undef MAKE_FUNCPTR
@@ -383,8 +385,17 @@
case ft_encoding_apple_roman:
(*insertface)->fs.fsCsb[0] |= 1;
break;
- case ft_encoding_symbol:
- (*insertface)->fs.fsCsb[0] |= 1L << 31;
+ case ft_encoding_symbol: {
+ UINT dummy;
+ /* only the fonts that have a character range in the 0xf000
+ * segment are recognised in windows with SYMBOL_CHARSET */
+ if(!pFT_Set_Charmap( ft_face, ft_face->charmaps[i]) &&
+ (pFT_Get_First_Char( ft_face, &dummy) & 0xf000))
+ (*insertface)->fs.fsCsb[0] |= 1L << 31;
+ else
+ WARN("MS_SYMBOL encoding of %s ignored: not the required character offset.\n",
+ debugstr_a(ft_face->family_name));
+ }
break;
default:
break;
@@ -686,6 +697,7 @@
LOAD_FUNCPTR(FT_Vector_Unit)
LOAD_FUNCPTR(FT_Done_Face)
LOAD_FUNCPTR(FT_Get_Char_Index)
+ LOAD_FUNCPTR(FT_Get_First_Char)
LOAD_FUNCPTR(FT_Get_Sfnt_Table)
LOAD_FUNCPTR(FT_Init_FreeType)
LOAD_FUNCPTR(FT_Load_Glyph)
@@ -696,6 +708,7 @@
LOAD_FUNCPTR(FT_Outline_Transform)
LOAD_FUNCPTR(FT_Outline_Translate)
LOAD_FUNCPTR(FT_Select_Charmap)
+ LOAD_FUNCPTR(FT_Set_Charmap)
LOAD_FUNCPTR(FT_Set_Pixel_Sizes)
LOAD_FUNCPTR(FT_Vector_Transform)
More information about the wine-patches
mailing list