Henri Verbeet : usp10: Iterate in visual order in GPOS_apply_feature().

Alexandre Julliard julliard at winehq.org
Tue Feb 21 16:56:13 CST 2017


Module: wine
Branch: master
Commit: b6d541cac50d14314a6ffde9dd32d4b9644e1192
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b6d541cac50d14314a6ffde9dd32d4b9644e1192

Author: Henri Verbeet <hverbeet at 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 at codeweavers.com>
Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);
     }
 }
 




More information about the wine-cvs mailing list