diff options
author | Adrian Johnson <ajohnson@redneon.com> | 2016-10-01 17:30:13 +0930 |
---|---|---|
committer | Adrian Johnson <ajohnson@redneon.com> | 2016-10-01 17:30:13 +0930 |
commit | 25da407a5f1d136345759c0d0a2a1d985eb2b392 (patch) | |
tree | a79dd34a23ed5abd343b6a44e03c9c281d9c6528 /src/cairo-paginated-surface.c | |
parent | 3bd5efa1b651503ed9f175f9ea62fff53f0b2882 (diff) | |
download | cairo-25da407a5f1d136345759c0d0a2a1d985eb2b392.tar.gz |
Support tag operations in analysis and paginated surface
Diffstat (limited to 'src/cairo-paginated-surface.c')
-rw-r--r-- | src/cairo-paginated-surface.c | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/src/cairo-paginated-surface.c b/src/cairo-paginated-surface.c index 68fa37ce3..749f0de73 100644 --- a/src/cairo-paginated-surface.c +++ b/src/cairo-paginated-surface.c @@ -352,8 +352,11 @@ _paint_page (cairo_paginated_surface_t *surface) if (unlikely (analysis->status)) return _cairo_surface_set_error (surface->target, analysis->status); - surface->backend->set_paginated_mode (surface->target, + status = surface->backend->set_paginated_mode (surface->target, CAIRO_PAGINATED_MODE_ANALYZE); + if (unlikely (status)) + goto FAIL; + status = _cairo_recording_surface_replay_and_create_regions (surface->recording_surface, NULL, analysis, FALSE); if (status) @@ -401,8 +404,10 @@ _paint_page (cairo_paginated_surface_t *surface) } if (has_supported) { - surface->backend->set_paginated_mode (surface->target, - CAIRO_PAGINATED_MODE_RENDER); + status = surface->backend->set_paginated_mode (surface->target, + CAIRO_PAGINATED_MODE_RENDER); + if (unlikely (status)) + goto FAIL; status = _cairo_recording_surface_replay_region (surface->recording_surface, NULL, @@ -417,8 +422,10 @@ _paint_page (cairo_paginated_surface_t *surface) cairo_rectangle_int_t extents; cairo_bool_t is_bounded; - surface->backend->set_paginated_mode (surface->target, - CAIRO_PAGINATED_MODE_FALLBACK); + status = surface->backend->set_paginated_mode (surface->target, + CAIRO_PAGINATED_MODE_FALLBACK); + if (unlikely (status)) + goto FAIL; is_bounded = _cairo_surface_get_extents (surface->target, &extents); if (! is_bounded) { @@ -435,8 +442,10 @@ _paint_page (cairo_paginated_surface_t *surface) cairo_region_t *region; int num_rects, i; - surface->backend->set_paginated_mode (surface->target, + status = surface->backend->set_paginated_mode (surface->target, CAIRO_PAGINATED_MODE_FALLBACK); + if (unlikely (status)) + goto FAIL; region = _cairo_analysis_surface_get_unsupported (analysis); @@ -660,6 +669,26 @@ _cairo_paginated_surface_get_supported_mime_types (void *abstract_surface) return NULL; } +static cairo_int_status_t +_cairo_paginated_surface_tag (void *abstract_surface, + cairo_bool_t begin, + const char *tag_name, + const char *attributes, + const cairo_pattern_t *source, + const cairo_stroke_style_t *style, + const cairo_matrix_t *ctm, + const cairo_matrix_t *ctm_inverse, + const cairo_clip_t *clip) +{ + cairo_paginated_surface_t *surface = abstract_surface; + + return _cairo_surface_tag (surface->recording_surface, + begin, tag_name, attributes, + source, style, + ctm, ctm_inverse, + clip); +} + static cairo_surface_t * _cairo_paginated_surface_snapshot (void *abstract_other) { @@ -714,4 +743,5 @@ static const cairo_surface_backend_t cairo_paginated_surface_backend = { _cairo_paginated_surface_has_show_text_glyphs, _cairo_paginated_surface_show_text_glyphs, _cairo_paginated_surface_get_supported_mime_types, + _cairo_paginated_surface_tag, }; |