diff options
author | Adrian Johnson <ajohnson@redneon.com> | 2016-10-01 17:26:16 +0930 |
---|---|---|
committer | Adrian Johnson <ajohnson@redneon.com> | 2016-10-01 17:26:16 +0930 |
commit | 3bd5efa1b651503ed9f175f9ea62fff53f0b2882 (patch) | |
tree | 4c10bd4c6dbf8e65100951e581127b5f15943071 /src/cairo-surface-wrapper.c | |
parent | 4e70815b349309e0a82bc8c52663e030c24a1add (diff) | |
download | cairo-3bd5efa1b651503ed9f175f9ea62fff53f0b2882.tar.gz |
Add tag functions to recording surface and surface-wrapper
Diffstat (limited to 'src/cairo-surface-wrapper.c')
-rw-r--r-- | src/cairo-surface-wrapper.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/cairo-surface-wrapper.c b/src/cairo-surface-wrapper.c index b9b4b44a5..47155c3f7 100644 --- a/src/cairo-surface-wrapper.c +++ b/src/cairo-surface-wrapper.c @@ -501,6 +501,53 @@ _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper, return status; } +cairo_status_t +_cairo_surface_wrapper_tag (cairo_surface_wrapper_t *wrapper, + cairo_bool_t begin, + const char *tag_name, + const char *attributes, + const cairo_pattern_t *source, + const cairo_stroke_style_t *stroke_style, + const cairo_matrix_t *ctm, + const cairo_matrix_t *ctm_inverse, + const cairo_clip_t *clip) +{ + cairo_status_t status; + cairo_clip_t *dev_clip; + cairo_matrix_t dev_ctm = *ctm; + cairo_matrix_t dev_ctm_inverse = *ctm_inverse; + cairo_pattern_union_t source_copy; + + if (unlikely (wrapper->target->status)) + return wrapper->target->status; + + dev_clip = _cairo_surface_wrapper_get_clip (wrapper, clip); + if (wrapper->needs_transform) { + cairo_matrix_t m; + + _cairo_surface_wrapper_get_transform (wrapper, &m); + + cairo_matrix_multiply (&dev_ctm, &dev_ctm, &m); + + status = cairo_matrix_invert (&m); + assert (status == CAIRO_STATUS_SUCCESS); + + cairo_matrix_multiply (&dev_ctm_inverse, &m, &dev_ctm_inverse); + + _copy_transformed_pattern (&source_copy.base, source, &m); + source = &source_copy.base; + } + + status = _cairo_surface_tag (wrapper->target, + begin, tag_name, attributes, + source, stroke_style, + &dev_ctm, &dev_ctm_inverse, + dev_clip); + + _cairo_clip_destroy (dev_clip); + return status; +} + cairo_surface_t * _cairo_surface_wrapper_create_similar (cairo_surface_wrapper_t *wrapper, cairo_content_t content, |