summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cairo-analysis-surface.c14
-rw-r--r--src/cairo-gstate.c43
-rw-r--r--src/cairo-paginated-surface.c12
-rw-r--r--src/cairo-pdf-surface.c7
-rw-r--r--src/cairo-recording-surface-private.h4
-rw-r--r--src/cairo-recording-surface.c92
-rw-r--r--src/cairo-surface-backend-private.h7
-rw-r--r--src/cairo-surface-wrapper-private.h7
-rw-r--r--src/cairo-surface-wrapper.c38
-rw-r--r--src/cairo-surface.c17
-rw-r--r--src/cairoint.h7
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,