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@codeweavers.com --- 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 abc2605919..0a269961b7 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; }
Signed-off-by: Aric Stewart aric@codeweavers.com
On 2/22/19 6:52 AM, Nikolay Sivov wrote:
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@codeweavers.com
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 abc2605919..0a269961b7 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;