diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-27 14:25:39 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-27 14:48:59 +0000 |
commit | b1b5e9b9087ff3e0679f850b36314ca38986a11d (patch) | |
tree | 0be44da04f63415b259ec33d03d7dd3df5992961 /src/cairo-surface-wrapper.c | |
parent | 78aeb0d14c7941964c232f4fc199d6d277835a79 (diff) | |
download | cairo-b1b5e9b9087ff3e0679f850b36314ca38986a11d.tar.gz |
surface-wrapper: Apply replay transforms to scaled font
Improves: record2x-select-font-face, record2x-text-transform
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-surface-wrapper.c')
-rw-r--r-- | src/cairo-surface-wrapper.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/cairo-surface-wrapper.c b/src/cairo-surface-wrapper.c index a1940a57d..b4dd64eb0 100644 --- a/src/cairo-surface-wrapper.c +++ b/src/cairo-surface-wrapper.c @@ -416,6 +416,7 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper, cairo_clip_t *dev_clip; cairo_glyph_t stack_glyphs [CAIRO_STACK_ARRAY_LENGTH(cairo_glyph_t)]; cairo_glyph_t *dev_glyphs = stack_glyphs; + cairo_scaled_font_t *dev_scaled_font = scaled_font; cairo_pattern_union_t source_copy; if (unlikely (wrapper->target->status)) @@ -431,6 +432,13 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper, _cairo_surface_wrapper_get_transform (wrapper, &m); + if (! _cairo_matrix_is_translation (&m)) { + dev_scaled_font = cairo_scaled_font_create (scaled_font->font_face, + &scaled_font->font_matrix, + &m, + &scaled_font->options); + } + if (num_glyphs > ARRAY_LENGTH (stack_glyphs)) { dev_glyphs = _cairo_malloc_ab (num_glyphs, sizeof (cairo_glyph_t)); if (unlikely (dev_glyphs == NULL)) { @@ -472,12 +480,14 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper, dev_glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - scaled_font, + dev_scaled_font, dev_clip); FINISH: _cairo_clip_destroy (dev_clip); if (dev_glyphs != stack_glyphs) free (dev_glyphs); + if (dev_scaled_font != scaled_font) + cairo_scaled_font_destroy (dev_scaled_font); return status; } |