From 24f17afeafd40ff77177ed42c9007a0f34fcbb78 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 21 Apr 2015 19:21:32 -0700 Subject: [PATCH] [coretext] Fix positioning with trailing whitespace Fixes https://code.google.com/p/chromium/issues/detail?id=476913 --- src/hb-coretext.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc index 4a4517528..fc47669d6 100644 --- a/src/hb-coretext.cc +++ b/src/hb-coretext.cc @@ -788,6 +788,17 @@ retry: buffer->len = 0; uint32_t status_and = ~0, status_or = 0; double advances_so_far = 0; + /* For right-to-left runs, CoreText returns the glyphs positioned such that + * any trailing whitespace is to the left of (0,0). Adjust coordinate system + * to fix for that. Test with any RTL string with trailing spaces. + * https://code.google.com/p/chromium/issues/detail?id=476913 + */ + if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction)) + { + advances_so_far -= CTLineGetTrailingWhitespaceWidth (line); + if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction)) + advances_so_far = -advances_so_far; + } const CFRange range_all = CFRangeMake (0, 0);