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