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.
This commit is contained in:
Adrian Johnson 2008-10-01 20:50:53 +09:30
parent ed2081d974
commit d682d275b9
17 changed files with 223 additions and 138 deletions

View file

@ -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,

View file

@ -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;

View file

@ -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);
}

View file

@ -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;

View file

@ -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;
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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,

View file

@ -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);
}

View file

@ -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);
}