From d682d275b90f7326df76d2764c513c8b6d5b551b Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Wed, 1 Oct 2008 20:50:53 +0930 Subject: [PATCH] Add an extents argument to the high level surface backend functions Add a "cairo_rectangle_int_t *extents" argument to to the following backend functions: paint mask, stroke fill show_glyphs show_text_glyphs This will be used to pass the extents of each operation computed by the analysis surface to the backend. This is required for implementing EXTEND_PAD. --- src/cairo-analysis-surface.c | 49 ++++++++++++++++++------------ src/cairo-directfb-surface.c | 3 +- src/cairo-gstate.c | 12 ++++---- src/cairo-meta-surface.c | 27 +++++++++------- src/cairo-paginated-surface.c | 27 +++++++++------- src/cairo-pdf-surface.c | 18 +++++++---- src/cairo-ps-surface.c | 12 +++++--- src/cairo-quartz-surface.c | 15 ++++++--- src/cairo-surface.c | 45 +++++++++++++++------------ src/cairo-svg-surface.c | 24 +++++++++------ src/cairo-type3-glyph-surface.c | 17 +++++++---- src/cairo-win32-printing-surface.c | 12 +++++--- src/cairo-win32-surface.c | 3 +- src/cairo-xlib-surface.c | 8 +++-- src/cairoint.h | 39 ++++++++++++++++-------- src/test-meta-surface.c | 25 +++++++++------ src/test-paginated-surface.c | 25 +++++++++------ 17 files changed, 223 insertions(+), 138 deletions(-) diff --git a/src/cairo-analysis-surface.c b/src/cairo-analysis-surface.c index 4337e92cf..be3f734b1 100644 --- a/src/cairo-analysis-surface.c +++ b/src/cairo-analysis-surface.c @@ -322,7 +322,8 @@ _cairo_analysis_surface_get_extents (void *abstract_surface, static cairo_int_status_t _cairo_analysis_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *paint_extents) { cairo_analysis_surface_t *surface = abstract_surface; cairo_status_t status, backend_status; @@ -333,7 +334,7 @@ _cairo_analysis_surface_paint (void *abstract_surface, backend_status = CAIRO_INT_STATUS_UNSUPPORTED; else backend_status = (*surface->target->backend->paint) (surface->target, op, - source); + source, NULL); if (backend_status == CAIRO_INT_STATUS_ANALYZE_META_SURFACE_PATTERN) backend_status = _analyze_meta_surface_pattern (surface, source); @@ -363,7 +364,8 @@ static cairo_int_status_t _cairo_analysis_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *mask_extents) { cairo_analysis_surface_t *surface = abstract_surface; cairo_int_status_t status, backend_status; @@ -374,7 +376,7 @@ _cairo_analysis_surface_mask (void *abstract_surface, backend_status = CAIRO_INT_STATUS_UNSUPPORTED; else backend_status = (*surface->target->backend->mask) (surface->target, op, - source, mask); + source, mask, NULL); if (backend_status == CAIRO_INT_STATUS_ANALYZE_META_SURFACE_PATTERN) { cairo_int_status_t backend_source_status = CAIRO_STATUS_SUCCESS; @@ -445,7 +447,8 @@ _cairo_analysis_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *stroke_extents) { cairo_analysis_surface_t *surface = abstract_surface; cairo_status_t status, backend_status; @@ -459,7 +462,7 @@ _cairo_analysis_surface_stroke (void *abstract_surface, backend_status = (*surface->target->backend->stroke) (surface->target, op, source, path, style, ctm, ctm_inverse, - tolerance, antialias); + tolerance, antialias, NULL); if (backend_status == CAIRO_INT_STATUS_ANALYZE_META_SURFACE_PATTERN) backend_status = _analyze_meta_surface_pattern (surface, source); @@ -515,7 +518,8 @@ _cairo_analysis_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *fill_extents) { cairo_analysis_surface_t *surface = abstract_surface; cairo_status_t status, backend_status; @@ -528,7 +532,7 @@ _cairo_analysis_surface_fill (void *abstract_surface, else backend_status = (*surface->target->backend->fill) (surface->target, op, source, path, fill_rule, - tolerance, antialias); + tolerance, antialias, NULL); if (backend_status == CAIRO_INT_STATUS_ANALYZE_META_SURFACE_PATTERN) backend_status = _analyze_meta_surface_pattern (surface, source); @@ -583,7 +587,8 @@ _cairo_analysis_surface_show_glyphs (void *abstract_surface, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *show_glyphs_extents) { cairo_analysis_surface_t *surface = abstract_surface; cairo_status_t status, backend_status; @@ -596,7 +601,7 @@ _cairo_analysis_surface_show_glyphs (void *abstract_surface, source, glyphs, num_glyphs, scaled_font, - remaining_glyphs); + remaining_glyphs, NULL); else if (surface->target->backend->show_text_glyphs) backend_status = surface->target->backend->show_text_glyphs (surface->target, op, source, @@ -604,7 +609,7 @@ _cairo_analysis_surface_show_glyphs (void *abstract_surface, glyphs, num_glyphs, NULL, 0, FALSE, - scaled_font); + scaled_font, NULL); else backend_status = CAIRO_INT_STATUS_UNSUPPORTED; @@ -662,7 +667,8 @@ _cairo_analysis_surface_show_text_glyphs (void *abstract_surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font) + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *show_text_glyphs_extents) { cairo_analysis_surface_t *surface = abstract_surface; cairo_status_t status, backend_status; @@ -677,14 +683,14 @@ _cairo_analysis_surface_show_text_glyphs (void *abstract_surface, utf8, utf8_len, glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - scaled_font); + scaled_font, NULL); if (backend_status == CAIRO_INT_STATUS_UNSUPPORTED && surface->target->backend->show_glyphs) { int remaining_glyphs = num_glyphs; backend_status = surface->target->backend->show_glyphs (surface->target, op, source, glyphs, num_glyphs, scaled_font, - &remaining_glyphs); + &remaining_glyphs, NULL); glyphs += num_glyphs - remaining_glyphs; num_glyphs = remaining_glyphs; if (remaining_glyphs == 0) @@ -898,13 +904,15 @@ typedef cairo_int_status_t typedef cairo_int_status_t (*_paint_func) (void *surface, cairo_operator_t op, - const cairo_pattern_t *source); + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents); typedef cairo_int_status_t (*_mask_func) (void *surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask); + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents); typedef cairo_int_status_t (*_stroke_func) (void *surface, @@ -915,7 +923,8 @@ typedef cairo_int_status_t cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias); + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents); typedef cairo_int_status_t (*_fill_func) (void *surface, @@ -924,7 +933,8 @@ typedef cairo_int_status_t cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias); + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents); typedef cairo_int_status_t (*_show_glyphs_func) (void *surface, @@ -933,7 +943,8 @@ typedef cairo_int_status_t cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs); + int *remaining_glyphs, + cairo_rectangle_int_t *extents); static const cairo_surface_backend_t cairo_null_surface_backend = { CAIRO_INTERNAL_SURFACE_TYPE_NULL, diff --git a/src/cairo-directfb-surface.c b/src/cairo-directfb-surface.c index 351e00d87..5a970b941 100644 --- a/src/cairo-directfb-surface.c +++ b/src/cairo-directfb-surface.c @@ -1687,7 +1687,8 @@ _cairo_directfb_surface_show_glyphs (void *abstract_dst, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { cairo_directfb_surface_t *dst = abstract_dst; cairo_directfb_font_cache_t *cache; diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 7e56a7785..5b8c87d70 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -899,7 +899,7 @@ _cairo_gstate_paint (cairo_gstate_t *gstate) status = _cairo_surface_paint (gstate->target, gstate->op, - pattern); + pattern, NULL); if (pattern == &pattern_stack.base) _cairo_pattern_fini (pattern); @@ -938,7 +938,7 @@ _cairo_gstate_mask (cairo_gstate_t *gstate, status = _cairo_surface_mask (gstate->target, gstate->op, source_pattern, - mask_pattern); + mask_pattern, NULL); if (mask_pattern == &mask_pattern_stack.base) _cairo_pattern_fini (&mask_pattern_stack.base); @@ -980,7 +980,7 @@ _cairo_gstate_stroke (cairo_gstate_t *gstate, cairo_path_fixed_t *path) &gstate->ctm, &gstate->ctm_inverse, gstate->tolerance, - gstate->antialias); + gstate->antialias, NULL); if (source_pattern == &source_pattern_stack.base) _cairo_pattern_fini (&source_pattern_stack.base); @@ -1056,7 +1056,7 @@ _cairo_gstate_fill (cairo_gstate_t *gstate, cairo_path_fixed_t *path) path, gstate->fill_rule, gstate->tolerance, - gstate->antialias); + gstate->antialias, NULL); if (pattern == &pattern_stack.base) _cairo_pattern_fini (&pattern_stack.base); @@ -1679,7 +1679,7 @@ _cairo_gstate_show_text_glyphs (cairo_gstate_t *gstate, transformed_glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - gstate->scaled_font); + gstate->scaled_font, NULL); } else { cairo_path_fixed_t path; @@ -1696,7 +1696,7 @@ _cairo_gstate_show_text_glyphs (cairo_gstate_t *gstate, &path, CAIRO_FILL_RULE_WINDING, gstate->tolerance, - gstate->scaled_font->options.antialias); + gstate->scaled_font->options.antialias, NULL); _cairo_path_fixed_fini (&path); } diff --git a/src/cairo-meta-surface.c b/src/cairo-meta-surface.c index faf48558a..5f9fed25d 100644 --- a/src/cairo-meta-surface.c +++ b/src/cairo-meta-surface.c @@ -219,7 +219,8 @@ _cairo_meta_surface_release_source_image (void *abstract_surface, static cairo_int_status_t _cairo_meta_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_meta_surface_t *meta = abstract_surface; @@ -260,7 +261,8 @@ static cairo_int_status_t _cairo_meta_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_meta_surface_t *meta = abstract_surface; @@ -306,7 +308,8 @@ _cairo_meta_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_meta_surface_t *meta = abstract_surface; @@ -361,7 +364,8 @@ _cairo_meta_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_meta_surface_t *meta = abstract_surface; @@ -419,7 +423,8 @@ _cairo_meta_surface_show_text_glyphs (void *abstract_surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font) + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_meta_surface_t *meta = abstract_surface; @@ -806,13 +811,13 @@ _cairo_meta_surface_replay_internal (cairo_surface_t *surface, case CAIRO_COMMAND_PAINT: status = _cairo_surface_paint (target, command->paint.op, - &command->paint.source.base); + &command->paint.source.base, NULL); break; case CAIRO_COMMAND_MASK: status = _cairo_surface_mask (target, command->mask.op, &command->mask.source.base, - &command->mask.mask.base); + &command->mask.mask.base, NULL); break; case CAIRO_COMMAND_STROKE: { @@ -834,7 +839,7 @@ _cairo_meta_surface_replay_internal (cairo_surface_t *surface, &dev_ctm, &dev_ctm_inverse, command->stroke.tolerance, - command->stroke.antialias); + command->stroke.antialias, NULL); break; } case CAIRO_COMMAND_FILL: @@ -881,7 +886,7 @@ _cairo_meta_surface_replay_internal (cairo_surface_t *surface, &dev_ctm, &dev_ctm_inverse, stroke_command->stroke.tolerance, - stroke_command->stroke.antialias); + stroke_command->stroke.antialias, NULL); i++; } else status = _cairo_surface_fill (target, @@ -890,7 +895,7 @@ _cairo_meta_surface_replay_internal (cairo_surface_t *surface, dev_path, command->fill.fill_rule, command->fill.tolerance, - command->fill.antialias); + command->fill.antialias, NULL); break; } case CAIRO_COMMAND_SHOW_TEXT_GLYPHS: @@ -927,7 +932,7 @@ _cairo_meta_surface_replay_internal (cairo_surface_t *surface, dev_glyphs, num_glyphs, command->show_text_glyphs.clusters, command->show_text_glyphs.num_clusters, command->show_text_glyphs.cluster_flags, - command->show_text_glyphs.scaled_font); + command->show_text_glyphs.scaled_font, NULL); free (dev_glyphs); break; diff --git a/src/cairo-paginated-surface.c b/src/cairo-paginated-surface.c index ec9419bbe..94a599e04 100644 --- a/src/cairo-paginated-surface.c +++ b/src/cairo-paginated-surface.c @@ -279,7 +279,7 @@ _paint_fallback_image (cairo_paginated_surface_t *surface, status = _cairo_surface_paint (surface->target, CAIRO_OPERATOR_SOURCE, - &pattern.base); + &pattern.base, NULL); _cairo_pattern_fini (&pattern.base); CLEANUP_IMAGE: @@ -529,7 +529,8 @@ _cairo_paginated_surface_get_font_options (void *abstract_surfa static cairo_int_status_t _cairo_paginated_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_paginated_surface_t *surface = abstract_surface; @@ -539,18 +540,19 @@ _cairo_paginated_surface_paint (void *abstract_surface, surface->page_is_blank = FALSE; - return _cairo_surface_paint (surface->meta, op, source); + return _cairo_surface_paint (surface->meta, op, source, NULL); } static cairo_int_status_t _cairo_paginated_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { cairo_paginated_surface_t *surface = abstract_surface; - return _cairo_surface_mask (surface->meta, op, source, mask); + return _cairo_surface_mask (surface->meta, op, source, mask, NULL); } static cairo_int_status_t @@ -562,7 +564,8 @@ _cairo_paginated_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_paginated_surface_t *surface = abstract_surface; @@ -575,7 +578,7 @@ _cairo_paginated_surface_stroke (void *abstract_surface, return _cairo_surface_stroke (surface->meta, op, source, path, style, ctm, ctm_inverse, - tolerance, antialias); + tolerance, antialias, NULL); } static cairo_int_status_t @@ -585,7 +588,8 @@ _cairo_paginated_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_paginated_surface_t *surface = abstract_surface; @@ -597,7 +601,7 @@ _cairo_paginated_surface_fill (void *abstract_surface, return _cairo_surface_fill (surface->meta, op, source, path, fill_rule, - tolerance, antialias); + tolerance, antialias, NULL); } static cairo_bool_t @@ -619,7 +623,8 @@ _cairo_paginated_surface_show_text_glyphs (void *abstract_surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font) + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents) { cairo_paginated_surface_t *surface = abstract_surface; cairo_int_status_t status; @@ -645,7 +650,7 @@ _cairo_paginated_surface_show_text_glyphs (void *abstract_surface, glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - scaled_font); + scaled_font, NULL); return status; } diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index b2a5619ef..6db4cd32b 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -4420,7 +4420,8 @@ _cairo_pdf_surface_start_fallback (cairo_pdf_surface_t *surface) static cairo_int_status_t _cairo_pdf_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_pdf_surface_t *surface = abstract_surface; cairo_status_t status; @@ -4500,7 +4501,8 @@ static cairo_int_status_t _cairo_pdf_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { cairo_pdf_surface_t *surface = abstract_surface; cairo_pdf_smask_group_t *group; @@ -4584,7 +4586,8 @@ _cairo_pdf_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_pdf_surface_t *surface = abstract_surface; cairo_status_t status; @@ -4675,7 +4678,8 @@ _cairo_pdf_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_pdf_surface_t *surface = abstract_surface; cairo_status_t status; @@ -4774,7 +4778,8 @@ _cairo_pdf_surface_fill_stroke (void *abstract_surface, cairo_matrix_t *stroke_ctm, cairo_matrix_t *stroke_ctm_inverse, double stroke_tolerance, - cairo_antialias_t stroke_antialias) + cairo_antialias_t stroke_antialias, + cairo_rectangle_int_t *extents) { cairo_pdf_surface_t *surface = abstract_surface; cairo_status_t status; @@ -4865,7 +4870,8 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font) + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents) { cairo_pdf_surface_t *surface = abstract_surface; cairo_status_t status; diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c index fbfdc3e54..624214383 100644 --- a/src/cairo-ps-surface.c +++ b/src/cairo-ps-surface.c @@ -3043,7 +3043,8 @@ _cairo_ps_surface_get_font_options (void *abstract_surface, static cairo_int_status_t _cairo_ps_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *paint_extents) { cairo_ps_surface_t *surface = abstract_surface; cairo_output_stream_t *stream = surface->stream; @@ -3108,7 +3109,8 @@ _cairo_ps_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_ps_surface_t *surface = abstract_surface; cairo_int_status_t status; @@ -3141,7 +3143,8 @@ _cairo_ps_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_ps_surface_t *surface = abstract_surface; cairo_int_status_t status; @@ -3203,7 +3206,8 @@ _cairo_ps_surface_show_glyphs (void *abstract_surface, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { cairo_ps_surface_t *surface = abstract_surface; cairo_status_t status; diff --git a/src/cairo-quartz-surface.c b/src/cairo-quartz-surface.c index fc9439e33..2addd8bc7 100644 --- a/src/cairo-quartz-surface.c +++ b/src/cairo-quartz-surface.c @@ -1667,7 +1667,8 @@ _cairo_quartz_surface_get_extents (void *abstract_surface, static cairo_int_status_t _cairo_quartz_surface_paint (void *abstract_surface, cairo_operator_t op, - cairo_pattern_t *source) + cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_quartz_surface_t *surface = (cairo_quartz_surface_t *) abstract_surface; cairo_int_status_t rv = CAIRO_STATUS_SUCCESS; @@ -1722,7 +1723,8 @@ _cairo_quartz_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_quartz_surface_t *surface = (cairo_quartz_surface_t *) abstract_surface; cairo_int_status_t rv = CAIRO_STATUS_SUCCESS; @@ -1829,7 +1831,8 @@ _cairo_quartz_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_quartz_surface_t *surface = (cairo_quartz_surface_t *) abstract_surface; cairo_int_status_t rv = CAIRO_STATUS_SUCCESS; @@ -1973,7 +1976,8 @@ _cairo_quartz_surface_show_glyphs (void *abstract_surface, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { CGAffineTransform textTransform, ctm; #define STATIC_BUF_SIZE 64 @@ -2286,7 +2290,8 @@ static cairo_int_status_t _cairo_quartz_surface_mask (void *abstract_surface, cairo_operator_t op, cairo_pattern_t *source, - cairo_pattern_t *mask) + cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { cairo_quartz_surface_t *surface = (cairo_quartz_surface_t *) abstract_surface; cairo_int_status_t rv = CAIRO_STATUS_SUCCESS; diff --git a/src/cairo-surface.c b/src/cairo-surface.c index ff75cc2ff..40b10e72b 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -327,7 +327,7 @@ _cairo_surface_create_similar_solid (cairo_surface_t *other, status = _cairo_surface_paint (surface, color == CAIRO_COLOR_TRANSPARENT ? CAIRO_OPERATOR_CLEAR : CAIRO_OPERATOR_SOURCE, - &solid_pattern.base); + &solid_pattern.base, NULL); _cairo_pattern_fini (&solid_pattern.base); @@ -373,7 +373,7 @@ _cairo_surface_repaint_solid_pattern_surface (cairo_surface_t *other, */ return CAIRO_INT_STATUS_UNSUPPORTED; - return _cairo_surface_paint (solid_surface, CAIRO_OPERATOR_SOURCE, &solid_pattern->base); + return _cairo_surface_paint (solid_surface, CAIRO_OPERATOR_SOURCE, &solid_pattern->base, NULL); } cairo_clip_mode_t @@ -1473,7 +1473,8 @@ _cairo_surface_fill_rectangles (cairo_surface_t *surface, cairo_status_t _cairo_surface_paint (cairo_surface_t *surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_pattern_union_t dev_source; @@ -1490,7 +1491,7 @@ _cairo_surface_paint (cairo_surface_t *surface, return _cairo_surface_set_error (surface, status); if (surface->backend->paint) { - status = surface->backend->paint (surface, op, source); + status = surface->backend->paint (surface, op, source, extents); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto FINISH; } @@ -1508,7 +1509,8 @@ cairo_status_t _cairo_surface_mask (cairo_surface_t *surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_pattern_union_t dev_source; @@ -1532,7 +1534,7 @@ _cairo_surface_mask (cairo_surface_t *surface, goto CLEANUP_SOURCE; if (surface->backend->mask) { - status = surface->backend->mask (surface, op, source, mask); + status = surface->backend->mask (surface, op, source, mask, extents); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto CLEANUP_MASK; } @@ -1564,7 +1566,8 @@ _cairo_surface_fill_stroke (cairo_surface_t *surface, cairo_matrix_t *stroke_ctm, cairo_matrix_t *stroke_ctm_inverse, double stroke_tolerance, - cairo_antialias_t stroke_antialias) + cairo_antialias_t stroke_antialias, + cairo_rectangle_int_t *extents) { cairo_status_t status; @@ -1600,7 +1603,8 @@ _cairo_surface_fill_stroke (cairo_surface_t *surface, stroke_op, stroke_source, stroke_style, &dev_ctm, &dev_ctm_inverse, - stroke_tolerance, stroke_antialias); + stroke_tolerance, stroke_antialias, + extents); if (stroke_source == &dev_stroke_source.base) _cairo_pattern_fini (&dev_stroke_source.base); @@ -1613,13 +1617,13 @@ _cairo_surface_fill_stroke (cairo_surface_t *surface, } status = _cairo_surface_fill (surface, fill_op, fill_source, path, - fill_rule, fill_tolerance, fill_antialias); + fill_rule, fill_tolerance, fill_antialias, NULL); if (status) return _cairo_surface_set_error (surface, status); status = _cairo_surface_stroke (surface, stroke_op, stroke_source, path, stroke_style, stroke_ctm, stroke_ctm_inverse, - stroke_tolerance, stroke_antialias); + stroke_tolerance, stroke_antialias, NULL); if (status) return _cairo_surface_set_error (surface, status); @@ -1635,7 +1639,8 @@ _cairo_surface_stroke (cairo_surface_t *surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_pattern_union_t dev_source; @@ -1659,7 +1664,7 @@ _cairo_surface_stroke (cairo_surface_t *surface, status = surface->backend->stroke (surface, op, source, path, stroke_style, &dev_ctm, &dev_ctm_inverse, - tolerance, antialias); + tolerance, antialias, extents); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto FINISH; @@ -1687,7 +1692,8 @@ _cairo_surface_fill (cairo_surface_t *surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_pattern_union_t dev_source; @@ -1706,7 +1712,7 @@ _cairo_surface_fill (cairo_surface_t *surface, if (surface->backend->fill) { status = surface->backend->fill (surface, op, source, path, fill_rule, - tolerance, antialias); + tolerance, antialias, extents); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto FINISH; @@ -2258,7 +2264,8 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font) + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_scaled_font_t *dev_scaled_font = scaled_font; @@ -2314,7 +2321,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface, utf8, utf8_len, glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - dev_scaled_font); + dev_scaled_font, extents); } if (status == CAIRO_INT_STATUS_UNSUPPORTED && surface->backend->show_glyphs) { int remaining_glyphs = num_glyphs; @@ -2322,7 +2329,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface, source, glyphs, num_glyphs, dev_scaled_font, - &remaining_glyphs); + &remaining_glyphs, extents); glyphs += num_glyphs - remaining_glyphs; num_glyphs = remaining_glyphs; if (status == CAIRO_INT_STATUS_UNSUPPORTED && remaining_glyphs == 0) @@ -2336,7 +2343,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface, source, glyphs, num_glyphs, dev_scaled_font, - &remaining_glyphs); + &remaining_glyphs, extents); glyphs += num_glyphs - remaining_glyphs; num_glyphs = remaining_glyphs; if (status == CAIRO_INT_STATUS_UNSUPPORTED && remaining_glyphs == 0) @@ -2355,7 +2362,7 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface, utf8, utf8_len, glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - dev_scaled_font); + dev_scaled_font, extents); } } diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index a50f13b8c..039cc39c3 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -1890,7 +1890,8 @@ _cairo_svg_surface_fill_stroke (void *abstract_surface, cairo_matrix_t *stroke_ctm, cairo_matrix_t *stroke_ctm_inverse, double stroke_tolerance, - cairo_antialias_t stroke_antialias) + cairo_antialias_t stroke_antialias, + cairo_rectangle_int_t *extents) { cairo_svg_surface_t *surface = abstract_surface; cairo_status_t status; @@ -1925,7 +1926,8 @@ _cairo_svg_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_svg_surface_t *surface = abstract_surface; cairo_status_t status; @@ -2013,7 +2015,8 @@ _cairo_svg_surface_emit_paint (cairo_output_stream_t *output, static cairo_int_status_t _cairo_svg_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_svg_surface_t *surface = abstract_surface; @@ -2065,9 +2068,10 @@ _cairo_svg_surface_paint (void *abstract_surface, static cairo_int_status_t _cairo_svg_surface_mask (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_pattern_t *mask) + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { cairo_status_t status; cairo_svg_surface_t *surface = abstract_surface; @@ -2154,7 +2158,8 @@ _cairo_svg_surface_stroke (void *abstract_dst, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_svg_surface_t *surface = abstract_dst; cairo_status_t status; @@ -2189,7 +2194,8 @@ _cairo_svg_surface_show_glyphs (void *abstract_surface, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { cairo_svg_surface_t *surface = abstract_surface; cairo_svg_document_t *document = surface->document; @@ -2261,7 +2267,7 @@ FALLBACK: } status = _cairo_svg_surface_fill (abstract_surface, op, pattern, - &path, CAIRO_FILL_RULE_WINDING, 0.0, CAIRO_ANTIALIAS_SUBPIXEL); + &path, CAIRO_FILL_RULE_WINDING, 0.0, CAIRO_ANTIALIAS_SUBPIXEL, NULL); _cairo_path_fixed_fini (&path); diff --git a/src/cairo-type3-glyph-surface.c b/src/cairo-type3-glyph-surface.c index 58048aca8..6f9eb43e4 100644 --- a/src/cairo-type3-glyph-surface.c +++ b/src/cairo-type3-glyph-surface.c @@ -182,7 +182,8 @@ _cairo_type3_glyph_surface_intersect_clip_path (void *abstract_surface, static cairo_int_status_t _cairo_type3_glyph_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_type3_glyph_surface_t *surface = abstract_surface; const cairo_surface_pattern_t *pattern; @@ -212,9 +213,10 @@ static cairo_int_status_t _cairo_type3_glyph_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { - return _cairo_type3_glyph_surface_paint (abstract_surface, op, mask); + return _cairo_type3_glyph_surface_paint (abstract_surface, op, mask, extents); } static cairo_int_status_t @@ -226,7 +228,8 @@ _cairo_type3_glyph_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_type3_glyph_surface_t *surface = abstract_surface; @@ -244,7 +247,8 @@ _cairo_type3_glyph_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_type3_glyph_surface_t *surface = abstract_surface; cairo_int_status_t status; @@ -263,7 +267,8 @@ _cairo_type3_glyph_surface_show_glyphs (void *abstract_surface, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { cairo_type3_glyph_surface_t *surface = abstract_surface; cairo_int_status_t status; diff --git a/src/cairo-win32-printing-surface.c b/src/cairo-win32-printing-surface.c index 553ef406b..77febf0bf 100644 --- a/src/cairo-win32-printing-surface.c +++ b/src/cairo-win32-printing-surface.c @@ -1037,7 +1037,8 @@ _cairo_win32_printing_surface_get_font_options (void *abstract_ static cairo_int_status_t _cairo_win32_printing_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { cairo_win32_surface_t *surface = abstract_surface; cairo_solid_pattern_t clear; @@ -1114,7 +1115,8 @@ _cairo_win32_printing_surface_stroke (void *abstract_surface, cairo_matrix_t *stroke_ctm, cairo_matrix_t *stroke_ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_win32_surface_t *surface = abstract_surface; cairo_int_status_t status; @@ -1235,7 +1237,8 @@ _cairo_win32_printing_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { cairo_win32_surface_t *surface = abstract_surface; cairo_int_status_t status; @@ -1294,7 +1297,8 @@ _cairo_win32_printing_surface_show_glyphs (void *abstract_surfac cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { cairo_win32_surface_t *surface = abstract_surface; cairo_status_t status = CAIRO_STATUS_SUCCESS; diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c index 05f5188cb..70af72bb8 100644 --- a/src/cairo-win32-surface.c +++ b/src/cairo-win32-surface.c @@ -1566,7 +1566,8 @@ _cairo_win32_surface_show_glyphs (void *surface, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { #if CAIRO_HAS_WIN32_FONT cairo_win32_surface_t *dst = surface; diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c index 7efe82877..c59694d5e 100644 --- a/src/cairo-xlib-surface.c +++ b/src/cairo-xlib-surface.c @@ -86,7 +86,8 @@ _cairo_xlib_surface_show_glyphs (void *abstract_dst, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs); + int *remaining_glyphs, + cairo_rectangle_int_t *extents); /* * Instead of taking two round trips for each blending request, @@ -1283,7 +1284,7 @@ _cairo_xlib_surface_create_solid_pattern_surface (void *abstrac status = _cairo_surface_paint (&image->base, CAIRO_OPERATOR_SOURCE, - &solid_pattern->base); + &solid_pattern->base, NULL); if (status) goto BAIL; @@ -3966,7 +3967,8 @@ _cairo_xlib_surface_show_glyphs (void *abstract_dst, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs) + int *remaining_glyphs, + cairo_rectangle_int_t *extents) { cairo_int_status_t status = CAIRO_STATUS_SUCCESS; cairo_xlib_surface_t *dst = (cairo_xlib_surface_t*) abstract_dst; diff --git a/src/cairoint.h b/src/cairoint.h index f94e68214..4e9eea4e2 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -726,13 +726,15 @@ struct _cairo_surface_backend { cairo_warn cairo_int_status_t (*paint) (void *surface, cairo_operator_t op, - const cairo_pattern_t *source); + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents); cairo_warn cairo_int_status_t (*mask) (void *surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask); + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents); cairo_warn cairo_int_status_t (*stroke) (void *surface, @@ -743,7 +745,8 @@ struct _cairo_surface_backend { cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias); + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents); cairo_warn cairo_int_status_t (*fill) (void *surface, @@ -752,7 +755,8 @@ struct _cairo_surface_backend { cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias); + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents); cairo_warn cairo_int_status_t (*show_glyphs) (void *surface, @@ -761,7 +765,8 @@ struct _cairo_surface_backend { cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, - int *remaining_glyphs); + int *remaining_glyphs, + cairo_rectangle_int_t *extents); cairo_surface_t * (*snapshot) (void *surface); @@ -788,7 +793,8 @@ struct _cairo_surface_backend { cairo_matrix_t *stroke_ctm, cairo_matrix_t *stroke_ctm_inverse, double stroke_tolerance, - cairo_antialias_t stroke_antialias); + cairo_antialias_t stroke_antialias, + cairo_rectangle_int_t *extents); cairo_surface_t * (*create_solid_pattern_surface) @@ -809,7 +815,8 @@ struct _cairo_surface_backend { const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font); + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents); }; #include "cairo-surface-private.h" @@ -1734,13 +1741,15 @@ _cairo_surface_fill_rectangles (cairo_surface_t *surface, cairo_private cairo_status_t _cairo_surface_paint (cairo_surface_t *surface, cairo_operator_t op, - const cairo_pattern_t *source); + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents); cairo_private cairo_status_t _cairo_surface_mask (cairo_surface_t *surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask); + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents); cairo_private cairo_status_t _cairo_surface_fill_stroke (cairo_surface_t *surface, @@ -1756,7 +1765,8 @@ _cairo_surface_fill_stroke (cairo_surface_t *surface, cairo_matrix_t *stroke_ctm, cairo_matrix_t *stroke_ctm_inverse, double stroke_tolerance, - cairo_antialias_t stroke_antialias); + cairo_antialias_t stroke_antialias, + cairo_rectangle_int_t *extents); cairo_private cairo_status_t _cairo_surface_stroke (cairo_surface_t *surface, @@ -1767,7 +1777,8 @@ _cairo_surface_stroke (cairo_surface_t *surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias); + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents); cairo_private cairo_status_t _cairo_surface_fill (cairo_surface_t *surface, @@ -1776,7 +1787,8 @@ _cairo_surface_fill (cairo_surface_t *surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias); + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents); cairo_private cairo_status_t _cairo_surface_show_text_glyphs (cairo_surface_t *surface, @@ -1789,7 +1801,8 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font); + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents); cairo_private cairo_status_t _cairo_surface_composite_trapezoids (cairo_operator_t op, diff --git a/src/test-meta-surface.c b/src/test-meta-surface.c index f19cbd692..71700bddc 100644 --- a/src/test-meta-surface.c +++ b/src/test-meta-surface.c @@ -194,26 +194,28 @@ _test_meta_surface_get_extents (void *abstract_surface, static cairo_int_status_t _test_meta_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { test_meta_surface_t *surface = abstract_surface; surface->image_reflects_meta = FALSE; - return _cairo_surface_paint (surface->meta, op, source); + return _cairo_surface_paint (surface->meta, op, source, extents); } static cairo_int_status_t _test_meta_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { test_meta_surface_t *surface = abstract_surface; surface->image_reflects_meta = FALSE; - return _cairo_surface_mask (surface->meta, op, source, mask); + return _cairo_surface_mask (surface->meta, op, source, mask, extents); } static cairo_int_status_t @@ -225,7 +227,8 @@ _test_meta_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { test_meta_surface_t *surface = abstract_surface; @@ -234,7 +237,7 @@ _test_meta_surface_stroke (void *abstract_surface, return _cairo_surface_stroke (surface->meta, op, source, path, style, ctm, ctm_inverse, - tolerance, antialias); + tolerance, antialias, extents); } static cairo_int_status_t @@ -244,7 +247,8 @@ _test_meta_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { test_meta_surface_t *surface = abstract_surface; @@ -252,7 +256,7 @@ _test_meta_surface_fill (void *abstract_surface, return _cairo_surface_fill (surface->meta, op, source, path, fill_rule, - tolerance, antialias); + tolerance, antialias, extents); } static cairo_bool_t @@ -274,7 +278,8 @@ _test_meta_surface_show_text_glyphs (void *abstract_surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font) + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents) { test_meta_surface_t *surface = abstract_surface; @@ -284,7 +289,7 @@ _test_meta_surface_show_text_glyphs (void *abstract_surface, utf8, utf8_len, glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - scaled_font); + scaled_font, extents); } diff --git a/src/test-paginated-surface.c b/src/test-paginated-surface.c index ba80a1079..cfb87f33f 100644 --- a/src/test-paginated-surface.c +++ b/src/test-paginated-surface.c @@ -169,28 +169,30 @@ _test_paginated_surface_get_extents (void *abstract_surface, static cairo_int_status_t _test_paginated_surface_paint (void *abstract_surface, cairo_operator_t op, - const cairo_pattern_t *source) + const cairo_pattern_t *source, + cairo_rectangle_int_t *extents) { test_paginated_surface_t *surface = abstract_surface; if (surface->paginated_mode == CAIRO_PAGINATED_MODE_ANALYZE) return CAIRO_STATUS_SUCCESS; - return _cairo_surface_paint (surface->target, op, source); + return _cairo_surface_paint (surface->target, op, source, extents); } static cairo_int_status_t _test_paginated_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, - const cairo_pattern_t *mask) + const cairo_pattern_t *mask, + cairo_rectangle_int_t *extents) { test_paginated_surface_t *surface = abstract_surface; if (surface->paginated_mode == CAIRO_PAGINATED_MODE_ANALYZE) return CAIRO_STATUS_SUCCESS; - return _cairo_surface_mask (surface->target, op, source, mask); + return _cairo_surface_mask (surface->target, op, source, mask, extents); } static cairo_int_status_t @@ -202,7 +204,8 @@ _test_paginated_surface_stroke (void *abstract_surface, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { test_paginated_surface_t *surface = abstract_surface; @@ -212,7 +215,7 @@ _test_paginated_surface_stroke (void *abstract_surface, return _cairo_surface_stroke (surface->target, op, source, path, style, ctm, ctm_inverse, - tolerance, antialias); + tolerance, antialias, extents); } static cairo_int_status_t @@ -222,7 +225,8 @@ _test_paginated_surface_fill (void *abstract_surface, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, - cairo_antialias_t antialias) + cairo_antialias_t antialias, + cairo_rectangle_int_t *extents) { test_paginated_surface_t *surface = abstract_surface; @@ -231,7 +235,7 @@ _test_paginated_surface_fill (void *abstract_surface, return _cairo_surface_fill (surface->target, op, source, path, fill_rule, - tolerance, antialias); + tolerance, antialias, extents); } static cairo_bool_t @@ -253,7 +257,8 @@ _test_paginated_surface_show_text_glyphs (void *abstract_surface, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, - cairo_scaled_font_t *scaled_font) + cairo_scaled_font_t *scaled_font, + cairo_rectangle_int_t *extents) { test_paginated_surface_t *surface = abstract_surface; @@ -264,7 +269,7 @@ _test_paginated_surface_show_text_glyphs (void *abstract_surface, utf8, utf8_len, glyphs, num_glyphs, clusters, num_clusters, cluster_flags, - scaled_font); + scaled_font, extents); }