Module: wine Branch: master Commit: b6d541cac50d14314a6ffde9dd32d4b9644e1192 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b6d541cac50d14314a6ffde9dd... Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Sun Feb 19 19:02:34 2017 +0100 usp10: Iterate in visual order in GPOS_apply_feature(). 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(a)codeweavers.com> Signed-off-by: Aric Stewart <aric(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- 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); } }