Nikolay Sivov : usp10: Use single path for all fonts in ScriptGetCMap().
Module: wine Branch: master Commit: df4aaff7a3832c040611e6152b6431ac853371a5 URL: https://source.winehq.org/git/wine.git/?a=commit;h=df4aaff7a3832c040611e6152... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Feb 22 15:52:48 2019 +0300 usp10: Use single path for all fonts in ScriptGetCMap(). Testing tmPitchAndFamily bitmask does not tell if font has mappings defined. Besides that, GetGlyphIndices() handles bitmap system fonts exactly the same way alternate path did. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46678 Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Aric Stewart <aric(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/usp10/usp10.c | 45 +++++++++++++++------------------------------ 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c index abc2605..0a26996 100644 --- a/dlls/usp10/usp10.c +++ b/dlls/usp10/usp10.c @@ -3544,42 +3544,27 @@ HRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars hr = S_OK; - if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE)) + for (i = 0; i < cChars; i++) { - for (i = 0; i < cChars; i++) + WCHAR inChar; + if (dwFlags == SGCM_RTL) + inChar = mirror_char(pwcInChars[i]); + else + inChar = pwcInChars[i]; + if (!(pwOutGlyphs[i] = get_cache_glyph(psc, inChar))) { - WCHAR inChar; - if (dwFlags == SGCM_RTL) - inChar = mirror_char(pwcInChars[i]); - else - inChar = pwcInChars[i]; - if (!(pwOutGlyphs[i] = get_cache_glyph(psc, inChar))) + WORD glyph; + if (!hdc) return E_PENDING; + if (GetGlyphIndicesW(hdc, &inChar, 1, &glyph, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) return S_FALSE; + if (glyph == 0xffff) { - WORD glyph; - if (!hdc) return E_PENDING; - if (GetGlyphIndicesW(hdc, &inChar, 1, &glyph, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) return S_FALSE; - if (glyph == 0xffff) - { - hr = S_FALSE; - glyph = 0x0; - } - pwOutGlyphs[i] = set_cache_glyph(psc, inChar, glyph); + hr = S_FALSE; + glyph = 0x0; } + pwOutGlyphs[i] = set_cache_glyph(psc, inChar, glyph); } } - else - { - TRACE("no glyph translation\n"); - for (i = 0; i < cChars; i++) - { - WCHAR inChar; - if (dwFlags == SGCM_RTL) - inChar = mirror_char(pwcInChars[i]); - else - inChar = pwcInChars[i]; - pwOutGlyphs[i] = inChar; - } - } + return hr; }
participants (1)
-
Alexandre Julliard