Index: reactos/win32ss/gdi/ntgdi/freetype.c =================================================================== --- reactos/win32ss/gdi/ntgdi/freetype.c (revision 74543) +++ reactos/win32ss/gdi/ntgdi/freetype.c (working copy) @@ -3091,7 +3091,14 @@ glyph_index = wch; iFormat &= ~GGO_GLYPH_INDEX; } - else glyph_index = FT_Get_Char_Index(ft_face, wch); + else + { + glyph_index = FT_Get_Char_Index(ft_face, wch); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(ft_face, wch | 0xF000); + } + } if (orientation || (iFormat != GGO_METRICS && iFormat != GGO_BITMAP) || aveWidth || pmat2) load_flags |= FT_LOAD_NO_BITMAP; @@ -3521,9 +3528,17 @@ for (i = 0; i < Count; i++) { if (fl & GTEF_INDICES) + { glyph_index = *String; + } else + { glyph_index = FT_Get_Char_Index(face, *String); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, *String | 0xF000); + } + } if (EmuBold || EmuItalic) realglyph = NULL; @@ -5352,9 +5367,17 @@ for (i = iStart; i < Count; i++) { if (fuOptions & ETO_GLYPH_INDEX) + { glyph_index = *TempText; + } else + { glyph_index = FT_Get_Char_Index(face, *TempText); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, *TempText | 0xF000); + } + } if (EmuBold || EmuItalic) realglyph = NULL; @@ -5463,9 +5486,17 @@ for (i = 0; i < Count; ++i) { if (fuOptions & ETO_GLYPH_INDEX) + { glyph_index = String[i]; + } else + { glyph_index = FT_Get_Char_Index(face, String[i]); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, String[i] | 0xF000); + } + } error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); if (error) @@ -5577,9 +5608,17 @@ for (i = 0; i < Count; ++i) { if (fuOptions & ETO_GLYPH_INDEX) + { glyph_index = String[i]; + } else + { glyph_index = FT_Get_Char_Index(face, String[i]); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, String[i] | 0xF000); + } + } if (EmuBold || EmuItalic) realglyph = NULL; @@ -6124,16 +6163,32 @@ if (Safepwch) { if (fl & GCABCW_INDICES) + { glyph_index = Safepwch[i - FirstChar]; + } else + { glyph_index = FT_Get_Char_Index(face, Safepwch[i - FirstChar]); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, Safepwch[i - FirstChar] | 0xF000); + } + } } else { if (fl & GCABCW_INDICES) + { glyph_index = i; + } else + { glyph_index = FT_Get_Char_Index(face, i); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, i | 0xF000); + } + } } FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); @@ -6318,16 +6373,32 @@ if (Safepwc) { if (fl & GCW_INDICES) + { glyph_index = Safepwc[i - FirstChar]; + } else + { glyph_index = FT_Get_Char_Index(face, Safepwc[i - FirstChar]); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, Safepwc[i - FirstChar] | 0xF000); + } + } } else { if (fl & GCW_INDICES) + { glyph_index = i; + } else + { glyph_index = FT_Get_Char_Index(face, i); + if (glyph_index == 0) + { + glyph_index = FT_Get_Char_Index(face, i | 0xF000); + } + } } FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); if (!fl) @@ -6485,7 +6556,11 @@ Buffer[i] = FT_Get_Char_Index(FontGDI->SharedFace->Face, Safepwc[i]); if (Buffer[i] == 0) { - Buffer[i] = DefChar; + Buffer[i] = FT_Get_Char_Index(FontGDI->SharedFace->Face, Safepwc[i] | 0xF000); + if (Buffer[i] == 0) + { + Buffer[i] = DefChar; + } } }