[PATCH 6/6] usp10: Iterate in visual order in GPOS_apply_feature().

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


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

On 2/19/17 12:02 PM, Henri Verbeet wrote:
> In particular, cursive attachment application depends on previous visual order
> glyph offsets. Affects e.g. wordpad with Nastaliq fonts.
> 
> Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
> ---
> This supersedes patch 130418.
> ---
>  dlls/usp10/shape.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/dlls/usp10/shape.c b/dlls/usp10/shape.c
> index 9549d9f..5c257dd 100644
> --- a/dlls/usp10/shape.c
> +++ b/dlls/usp10/shape.c
> @@ -882,15 +882,17 @@ static int apply_GSUB_feature(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, W
>  
>  static VOID GPOS_apply_feature(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, const SCRIPT_ANALYSIS *analysis, INT* piAdvance, LoadedFeature *feature, const WORD *glyphs, INT glyph_count, GOFFSET *pGoffset)
>  {
> -    int i;
> +    int dir = analysis->fLogicalOrder && analysis->fRTL ? -1 : 1;
> +    unsigned int start_idx, i, j;
>  
>      TRACE("%i lookups\n", feature->lookup_count);
> +
> +    start_idx = dir < 0 ? glyph_count - 1 : 0;
>      for (i = 0; i < feature->lookup_count; i++)
>      {
> -        int j;
>          for (j = 0; j < glyph_count; )
>              j += OpenType_apply_GPOS_lookup(psc, lpotm, lplogfont, analysis, piAdvance,
> -                    feature->lookups[i], glyphs, j, glyph_count, pGoffset);
> +                    feature->lookups[i], glyphs, start_idx + dir * j, glyph_count, pGoffset);
>      }
>  }
>  
> 



More information about the wine-patches mailing list