summaryrefslogtreecommitdiff
path: root/src/cairo-surface-wrapper.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-02-27 14:25:39 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-02-27 14:48:59 +0000
commitb1b5e9b9087ff3e0679f850b36314ca38986a11d (patch)
tree0be44da04f63415b259ec33d03d7dd3df5992961 /src/cairo-surface-wrapper.c
parent78aeb0d14c7941964c232f4fc199d6d277835a79 (diff)
downloadcairo-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.c12
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;
}