From 986b0ff83813b68a19490fe8629bfdaeed68cbe2 Mon Sep 17 00:00:00 2001 From: Brian Ewins Date: Mon, 19 Mar 2007 18:21:27 +0000 Subject: [PATCH] [atsui] make text_to_glyphs return positions in user units. (#9568) text_to_glyphs was returning positions in device units; correct this to use user units. --- src/cairo-atsui-font.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/cairo-atsui-font.c b/src/cairo-atsui-font.c index 030db16b2..a26e76ffa 100644 --- a/src/cairo-atsui-font.c +++ b/src/cairo-atsui-font.c @@ -844,6 +844,9 @@ _cairo_atsui_font_text_to_glyphs (void *abstract_font, cairo_atsui_font_t *font = abstract_font; ItemCount glyphCount; int i; + CGPoint point; + double xscale, yscale; + CGAffineTransform device_to_user_scale; status = _cairo_utf8_to_utf16 ((unsigned char *)utf8, -1, &utf16, &n16); if (status) @@ -870,9 +873,18 @@ _cairo_atsui_font_text_to_glyphs (void *abstract_font, return CAIRO_STATUS_NO_MEMORY; } + _cairo_matrix_compute_scale_factors (&font->base.ctm, &xscale, &yscale, 1); + device_to_user_scale = + CGAffineTransformInvert (CGAffineTransformMake (xscale, 0, + 0, yscale, + 0, 0)); for (i = 0; i < *num_glyphs; i++) { (*glyphs)[i].index = layoutRecords[i].glyphID; - (*glyphs)[i].x = x + FixedToFloat(layoutRecords[i].realPos); + /* ATSLayoutRecord.realPos is in device units, convert to user units */ + point = CGPointMake (FixedToFloat (layoutRecords[i].realPos), 0); + point = CGPointApplyAffineTransform (point, device_to_user_scale); + + (*glyphs)[i].x = x + point.x; (*glyphs)[i].y = y; }