[PATCH 3/5] usp10: Properly get glyph widths for OpenType fonts in ScriptPlaceOpenType().

Aric Stewart aric at codeweavers.com
Tue Feb 21 07:04:10 CST 2017


Signed-off-by: Aric Stewart <aric at codeweavers.com>

On 2/19/17 11:16 AM, Henri Verbeet wrote:
> I.e., don't use GetCharWidth32W() with glyph indices. This fixes glyph
> advances for OpenType fonts in wordpad.
> 
> Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
> ---
>  dlls/usp10/usp10.c | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c
> index 3595ca2..f8a6aa5 100644
> --- a/dlls/usp10/usp10.c
> +++ b/dlls/usp10/usp10.c
> @@ -3347,15 +3347,24 @@ HRESULT WINAPI ScriptPlaceOpenType( HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS
>          }
>          else if (!get_cache_glyph_widths(psc, pwGlyphs[i], &abc))
>          {
> +            BOOL ret;
>              if (!hdc) return E_PENDING;
> -            if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE) && !psa->fNoGlyphIndex)
> +            if (get_cache_pitch_family(psc) & TMPF_TRUETYPE)
>              {
> -                if (!GetCharABCWidthsI(hdc, 0, 1, (WORD *)&pwGlyphs[i], &abc)) return S_FALSE;
> +                if (psa->fNoGlyphIndex)
> +                    ret = GetCharABCWidthsW(hdc, pwGlyphs[i], pwGlyphs[i], &abc);
> +                else
> +                    ret = GetCharABCWidthsI(hdc, 0, 1, (WORD *)&pwGlyphs[i], &abc);
> +                if (!ret) return S_FALSE;
>              }
>              else
>              {
>                  INT width;
> -                if (!GetCharWidth32W(hdc, pwGlyphs[i], pwGlyphs[i], &width)) return S_FALSE;
> +                if (psa->fNoGlyphIndex)
> +                    ret = GetCharWidth32W(hdc, pwGlyphs[i], pwGlyphs[i], &width);
> +                else
> +                    ret = GetCharWidthI(hdc, 0, 1, (WORD *)&pwGlyphs[i], &width);
> +                if (!ret) return S_FALSE;
>                  abc.abcB = width;
>                  abc.abcA = abc.abcC = 0;
>              }
> 



More information about the wine-patches mailing list