{
int j, from, to, adj_offset = 0;
- /* For RTL text, the Uniscribe shaper prepares the
- values in ADVANCES array for layout in reverse order,
- whereby "advance width" is applied to move the pen in
- reverse direction and _before_ drawing the glyph.
- Since we draw glyphs in their normal left-to-right
- order, we need to adjust the coordinates of each
- non-base glyph in a grapheme cluster via X-OFF
- component of the gstring's ADJUSTMENT sub-vector.
- This loop computes the initial value of the
- adjustment for the base character, which is then
- updated for each successive glyph in the grapheme
- cluster. */
- if (items[i].a.fRTL)
- for (j = 1; j < nglyphs; j++)
- adj_offset += advances[j];
-
from = 0;
to = from;
}
}
}
+
+ /* For RTL text, the Uniscribe shaper prepares
+ the values in ADVANCES array for layout in
+ reverse order, whereby "advance width" is
+ applied to move the pen in reverse direction
+ and _before_ drawing the glyph. Since we
+ draw glyphs in their normal left-to-right
+ order, we need to adjust the coordinates of
+ each non-base glyph in a grapheme cluster via
+ X-OFF component of the gstring's ADJUSTMENT
+ sub-vector. This loop computes, for each
+ grapheme cluster, the initial value of the
+ adjustment for the base character, which is
+ then updated for each successive glyph in the
+ grapheme cluster. */
+ if (items[i].a.fRTL)
+ {
+ int j1 = j;
+
+ adj_offset = 0;
+ while (j1 < nglyphs && !attributes[j1].fClusterStart)
+ {
+ adj_offset += advances[j1];
+ j1++;
+ }
+ }
}
LGLYPH_SET_CHAR (lglyph, chars[items[i].iCharPos