diff options
-rw-r--r-- | src/cairo-analysis-surface.c | 14 | ||||
-rw-r--r-- | src/cairo-gstate.c | 43 | ||||
-rw-r--r-- | src/cairo-paginated-surface.c | 12 | ||||
-rw-r--r-- | src/cairo-pdf-surface.c | 7 | ||||
-rw-r--r-- | src/cairo-recording-surface-private.h | 4 | ||||
-rw-r--r-- | src/cairo-recording-surface.c | 92 | ||||
-rw-r--r-- | src/cairo-surface-backend-private.h | 7 | ||||
-rw-r--r-- | src/cairo-surface-wrapper-private.h | 7 | ||||
-rw-r--r-- | src/cairo-surface-wrapper.c | 38 | ||||
-rw-r--r-- | src/cairo-surface.c | 17 | ||||
-rw-r--r-- | src/cairoint.h | 7 |
11 files changed, 29 insertions, 219 deletions
diff --git a/src/cairo-analysis-surface.c b/src/cairo-analysis-surface.c index 3a6fd0598..a118e338c 100644 --- a/src/cairo-analysis-surface.c +++ b/src/cairo-analysis-surface.c @@ -755,12 +755,7 @@ static cairo_int_status_t _cairo_analysis_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 *stroke_style, - const cairo_matrix_t *ctm, - const cairo_matrix_t *ctm_inverse, - const cairo_clip_t *clip) + const char *attributes) { cairo_analysis_surface_t *surface = abstract_surface; cairo_int_status_t backend_status; @@ -771,12 +766,7 @@ _cairo_analysis_surface_tag (void *abstract_surface, surface->target->backend->tag (surface->target, begin, tag_name, - attributes, - source, - stroke_style, - ctm, - ctm_inverse, - clip); + attributes); if (backend_status == CAIRO_INT_STATUS_SUCCESS) surface->has_supported = TRUE; } diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index a5f6fc72f..64060c4fc 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -1657,44 +1657,10 @@ cairo_status_t _cairo_gstate_tag_begin (cairo_gstate_t *gstate, const char *tag_name, const char *attributes) { - cairo_pattern_union_t source_pattern; - cairo_stroke_style_t style; - double dash[2]; - cairo_status_t status; - cairo_matrix_t aggregate_transform; - cairo_matrix_t aggregate_transform_inverse; - - status = _cairo_gstate_get_pattern_status (gstate->source); - if (unlikely (status)) - return status; - - cairo_matrix_multiply (&aggregate_transform, - &gstate->ctm, - &gstate->target->device_transform); - cairo_matrix_multiply (&aggregate_transform_inverse, - &gstate->target->device_transform_inverse, - &gstate->ctm_inverse); - - memcpy (&style, &gstate->stroke_style, sizeof (gstate->stroke_style)); - if (_cairo_stroke_style_dash_can_approximate (&gstate->stroke_style, &aggregate_transform, gstate->tolerance)) { - style.dash = dash; - _cairo_stroke_style_dash_approximate (&gstate->stroke_style, &gstate->ctm, gstate->tolerance, - &style.dash_offset, - style.dash, - &style.num_dashes); - } - - _cairo_gstate_copy_transformed_source (gstate, &source_pattern.base); - return _cairo_surface_tag (gstate->target, TRUE, /* begin */ tag_name, - attributes ? attributes : "", - &source_pattern.base, - &style, - &aggregate_transform, - &aggregate_transform_inverse, - gstate->clip); + attributes ? attributes : ""); } cairo_status_t @@ -1704,12 +1670,7 @@ _cairo_gstate_tag_end (cairo_gstate_t *gstate, return _cairo_surface_tag (gstate->target, FALSE, /* begin */ tag_name, - NULL, /* attributes */ - NULL, /* source */ - NULL, /* stroke_style */ - NULL, /* ctm */ - NULL, /* ctm_inverse*/ - NULL); /* clip */ + NULL); /* attributes */ } static void diff --git a/src/cairo-paginated-surface.c b/src/cairo-paginated-surface.c index 6b35c1f92..a3f7cd9b2 100644 --- a/src/cairo-paginated-surface.c +++ b/src/cairo-paginated-surface.c @@ -737,20 +737,12 @@ 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) + const char *attributes) { cairo_paginated_surface_t *surface = abstract_surface; return _cairo_surface_tag (surface->recording_surface, - begin, tag_name, attributes, - source, style, - ctm, ctm_inverse, - clip); + begin, tag_name, attributes); } static cairo_surface_t * diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 52c49b6d2..b033fdf07 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -8440,12 +8440,7 @@ static cairo_int_status_t _cairo_pdf_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) + const char *attributes) { cairo_pdf_surface_t *surface = abstract_surface; cairo_int_status_t status = 0; diff --git a/src/cairo-recording-surface-private.h b/src/cairo-recording-surface-private.h index c1827f5b3..e8d98e8fa 100644 --- a/src/cairo-recording-surface-private.h +++ b/src/cairo-recording-surface-private.h @@ -120,10 +120,6 @@ typedef struct _cairo_command_tag { cairo_bool_t begin; char *tag_name; char *attributes; - cairo_pattern_union_t source; - cairo_stroke_style_t style; - cairo_matrix_t ctm; - cairo_matrix_t ctm_inverse; } cairo_command_tag_t; typedef union _cairo_command { diff --git a/src/cairo-recording-surface.c b/src/cairo-recording-surface.c index 8d0e5376a..8bb5d1769 100644 --- a/src/cairo-recording-surface.c +++ b/src/cairo-recording-surface.c @@ -487,8 +487,6 @@ _cairo_recording_surface_finish (void *abstract_surface) free (command->tag.tag_name); if (command->tag.begin) { free (command->tag.attributes); - _cairo_pattern_fini (&command->tag.source.base); - _cairo_stroke_style_fini (&command->tag.style); } break; @@ -651,14 +649,14 @@ _command_init (cairo_recording_surface_t *surface, command->op = op; command->region = CAIRO_RECORDING_REGION_ALL; - command->extents = composite->unbounded; + command->extents = composite ? composite->unbounded : _cairo_empty_rectangle; command->chain = NULL; command->index = surface->commands.num_elements; /* steal the clip */ command->clip = NULL; - if (! _cairo_composite_rectangles_can_reduce_clip (composite, - composite->clip)) + if (composite && ! _cairo_composite_rectangles_can_reduce_clip (composite, + composite->clip)) { command->clip = composite->clip; composite->clip = NULL; @@ -1092,12 +1090,7 @@ static cairo_int_status_t _cairo_recording_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) + const char *attributes) { cairo_status_t status; cairo_recording_surface_t *surface = abstract_surface; @@ -1106,13 +1099,6 @@ _cairo_recording_surface_tag (void *abstract_surface, TRACE ((stderr, "%s: surface=%d\n", __FUNCTION__, surface->base.unique_id)); - status = _cairo_composite_rectangles_init_for_paint (&composite, - &surface->base, - CAIRO_OPERATOR_SOURCE, - source ? source : &_cairo_pattern_black.base, - clip); - if (unlikely (status)) - return status; command = calloc (1, sizeof (cairo_command_tag_t)); if (unlikely (command == NULL)) { @@ -1122,7 +1108,7 @@ _cairo_recording_surface_tag (void *abstract_surface, status = _command_init (surface, &command->header, CAIRO_COMMAND_TAG, CAIRO_OPERATOR_SOURCE, - &composite); + NULL); if (unlikely (status)) goto CLEANUP_COMMAND; @@ -1140,36 +1126,17 @@ _cairo_recording_surface_tag (void *abstract_surface, goto CLEANUP_STRINGS; } } - - status = _cairo_pattern_init_snapshot (&command->source.base, source); - if (unlikely (status)) - goto CLEANUP_STRINGS; - - status = _cairo_stroke_style_init_copy (&command->style, style); - if (unlikely (status)) - goto CLEANUP_SOURCE; - - command->ctm = *ctm; - command->ctm_inverse = *ctm_inverse; } status = _cairo_recording_surface_commit (surface, &command->header); - if (unlikely (status)) { - if (begin) - goto CLEANUP_STYLE; - else - goto CLEANUP_STRINGS; - } + if (unlikely (status)) + goto CLEANUP_STRINGS; _cairo_recording_surface_destroy_bbtree (surface); _cairo_composite_rectangles_fini (&composite); return CAIRO_STATUS_SUCCESS; - CLEANUP_STYLE: - _cairo_stroke_style_fini (&command->style); - CLEANUP_SOURCE: - _cairo_pattern_fini (&command->source.base); CLEANUP_STRINGS: free (command->tag_name); free (command->attributes); @@ -1475,35 +1442,14 @@ _cairo_recording_surface_copy__tag (cairo_recording_surface_t *surface, goto err_command; } } - - status = _cairo_pattern_init_copy (&command->source.base, - &src->tag.source.base); - if (unlikely (status)) - goto err_command; - - status = _cairo_stroke_style_init_copy (&command->style, - &src->tag.style); - if (unlikely (status)) - goto err_source; - - command->ctm = src->tag.ctm; - command->ctm_inverse = src->tag.ctm_inverse; } status = _cairo_recording_surface_commit (surface, &command->header); - if (unlikely (status)) { - if (src->tag.begin) - goto err_style; - else - goto err_command; - } + if (unlikely (status)) + goto err_command; return CAIRO_STATUS_SUCCESS; -err_style: - _cairo_stroke_style_fini (&command->style); -err_source: - _cairo_pattern_fini (&command->source.base); err_command: free(command->tag_name); free(command->attributes); @@ -1906,8 +1852,10 @@ _cairo_recording_surface_replay_internal (cairo_recording_surface_t *surface, if (! replay_all && command->header.region != region) continue; - if (! _cairo_rectangle_intersects (&extents, &command->header.extents)) - continue; + if (! _cairo_rectangle_intersects (&extents, &command->header.extents)) { + if (command->header.type != CAIRO_COMMAND_TAG) + continue; + } switch (command->header.type) { case CAIRO_COMMAND_PAINT: @@ -2044,12 +1992,7 @@ _cairo_recording_surface_replay_internal (cairo_recording_surface_t *surface, status = _cairo_surface_wrapper_tag (&wrapper, command->tag.begin, command->tag.tag_name, - command->tag.attributes, - &command->tag.source.base, - &command->tag.style, - &command->tag.ctm, - &command->tag.ctm_inverse, - command->header.clip); + command->tag.attributes); break; default: @@ -2163,12 +2106,7 @@ _cairo_recording_surface_replay_one (cairo_recording_surface_t *surface, status = _cairo_surface_wrapper_tag (&wrapper, command->tag.begin, command->tag.tag_name, - command->tag.attributes, - &command->tag.source.base, - &command->tag.style, - &command->tag.ctm, - &command->tag.ctm_inverse, - command->header.clip); + command->tag.attributes); break; default: diff --git a/src/cairo-surface-backend-private.h b/src/cairo-surface-backend-private.h index bcda9aed1..d31655be8 100644 --- a/src/cairo-surface-backend-private.h +++ b/src/cairo-surface-backend-private.h @@ -205,12 +205,7 @@ struct _cairo_surface_backend { (*tag) (void *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); + const char *attributes); }; diff --git a/src/cairo-surface-wrapper-private.h b/src/cairo-surface-wrapper-private.h index fd22bd7e6..380ba099d 100644 --- a/src/cairo-surface-wrapper-private.h +++ b/src/cairo-surface-wrapper-private.h @@ -163,12 +163,7 @@ cairo_private 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); + const char *attributes); cairo_private cairo_surface_t * _cairo_surface_wrapper_create_similar (cairo_surface_wrapper_t *wrapper, diff --git a/src/cairo-surface-wrapper.c b/src/cairo-surface-wrapper.c index 47155c3f7..7fb417a20 100644 --- a/src/cairo-surface-wrapper.c +++ b/src/cairo-surface-wrapper.c @@ -505,47 +505,13 @@ 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) + const char *attributes) { - 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; + return _cairo_surface_tag (wrapper->target, begin, tag_name, attributes); } cairo_surface_t * diff --git a/src/cairo-surface.c b/src/cairo-surface.c index 0a95047f3..45296fccd 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -2937,12 +2937,7 @@ cairo_status_t _cairo_surface_tag (cairo_surface_t *surface, 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) + const char *attributes) { cairo_int_status_t status; @@ -2955,15 +2950,7 @@ _cairo_surface_tag (cairo_surface_t *surface, if (surface->backend->tag == NULL) return CAIRO_STATUS_SUCCESS; - if (begin) { - status = _pattern_has_error (source); - if (unlikely (status)) - return status; - } - - status = surface->backend->tag (surface, begin, tag_name, attributes, - source, stroke_style, - ctm, ctm_inverse, clip); + status = surface->backend->tag (surface, begin, tag_name, attributes); surface->is_clear = FALSE; return _cairo_surface_set_error (surface, status); diff --git a/src/cairoint.h b/src/cairoint.h index 832d80f3f..fd6fc9aa4 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -1465,12 +1465,7 @@ cairo_private cairo_status_t _cairo_surface_tag (cairo_surface_t *surface, 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); + const char *attributes); cairo_private cairo_status_t _cairo_surface_acquire_source_image (cairo_surface_t *surface, |