Hi guys, I have a font with GPOS kerning with position and advancement adjustments for arabic. This seems to be fairly rare as I cannot find another font with GPOS kerning for a RTL language.
Using Qt, I got the following result: http://picpaste.com/pics/malcom_text_with_unmodified_qt-zkLg01BQ.1319616036.png The below patch fixes the adjustment problems, making it look like: http://picpaste.com/pics/malcom_text_with_modified_qt-kItcU2Cx.1319616047.png diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp index 1021b02..9a80558 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp @@ -1264,7 +1264,7 @@ HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool do // (int)(positions[i].x_pos >> 6), (int)(positions[i].y_pos >> 6), // positions[i].back, positions[i].new_advance); - HB_Fixed adjustment = (item->item.bidiLevel % 2) ? -positions[i].x_advance : positions[i].x_advance; + HB_Fixed adjustment = positions[i].x_advance; if (!(face->current_flags & HB_ShaperFlag_UseDesignMetrics)) adjustment = HB_FIXED_ROUND(adjustment); This changes also makes the code more similar to what pango does, in pango-ot-buffer.c adjustment = PANGO_UNITS_26_6(positions[i_rev].x_advance); if (is_hinted) adjustment = PANGO_UNITS_ROUND (adjustment); if (G_UNLIKELY (scale)) adjustment *= xscale; if (positions[i_rev].new_advance) glyphs->glyphs[i].geometry.width = adjustment; else glyphs->glyphs[i].geometry.width += adjustment; _______________________________________________ HarfBuzz mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/harfbuzz
