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

Henri Verbeet hverbeet at codeweavers.com
Sun Feb 19 12:02:34 CST 2017


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);
     }
 }
 
-- 
2.1.4




More information about the wine-patches mailing list