Module: wine Branch: master Commit: ac0c1d41d1773f5029cc73ae9bd4cfb2ef358b80 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ac0c1d41d1773f5029cc73ae9...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Thu Jun 13 23:50:25 2019 +0900
usp10: Fix advance width when glyph is missing.
This fixes a regression introduced by 8d018d8d1dadf9d731690567b9c98d5a9eae37db.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47327 Signed-off-by: Akihiro Sagawa sagawa.aki@gmail.com Signed-off-by: Aric Stewart aric@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/usp10/tests/usp10.c | 4 ++-- dlls/usp10/usp10.c | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c index 270a0f4..ecfac4b 100644 --- a/dlls/usp10/tests/usp10.c +++ b/dlls/usp10/tests/usp10.c @@ -2199,11 +2199,11 @@ static void test_ScriptPlace(HDC hdc) { ok(offset[i].du == 0, "[%d] expected 0, got %d\n", i, offset[i].du); ok(offset[i].dv == 0, "[%d] expected 0, got %d\n", i, offset[i].dv); - todo_wine ok(widths[i] > tm.tmAveCharWidth, "[%d] expected greater than %d, got %d\n", + ok(widths[i] > tm.tmAveCharWidth, "[%d] expected greater than %d, got %d\n", i, tm.tmAveCharWidth, widths[i]); total += widths[i]; } - todo_wine ok(total == sz.cx, "expected %d, got %d\n", sz.cx, total); + ok(total == sz.cx, "expected %d, got %d\n", sz.cx, total); } else skip("Associated font is unavailable\n"); diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c index 6975a49..a2e1a73 100644 --- a/dlls/usp10/usp10.c +++ b/dlls/usp10/usp10.c @@ -3434,9 +3434,27 @@ HRESULT WINAPI ScriptPlaceOpenType( HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS if (FAILED(hr = ScriptGetCMap(hdc, psc, &pwGlyphs[i], 1, 0, &glyph))) return hr; } else + { + hr = S_OK; glyph = pwGlyphs[i]; + }
- if (!get_cache_glyph_widths(psc, glyph, &abc)) + if (hr == S_FALSE) + { + if (!hdc) return E_PENDING; + if (get_cache_pitch_family(psc) & TMPF_TRUETYPE) + { + if (!GetCharABCWidthsW(hdc, pwGlyphs[i], pwGlyphs[i], &abc)) return S_FALSE; + } + else + { + INT width; + if (!GetCharWidthW(hdc, pwGlyphs[i], pwGlyphs[i], &width)) return S_FALSE; + abc.abcB = width; + abc.abcA = abc.abcC = 0; + } + } + else if (!get_cache_glyph_widths(psc, glyph, &abc)) { if (!hdc) return E_PENDING; if (get_cache_pitch_family(psc) & TMPF_TRUETYPE)