summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/tee-surfaces-pointwise.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/tee-surfaces-pointwise.patch')
-rw-r--r--gfx/cairo/tee-surfaces-pointwise.patch278
1 files changed, 0 insertions, 278 deletions
diff --git a/gfx/cairo/tee-surfaces-pointwise.patch b/gfx/cairo/tee-surfaces-pointwise.patch
deleted file mode 100644
index 180005fa6..000000000
--- a/gfx/cairo/tee-surfaces-pointwise.patch
+++ /dev/null
@@ -1,278 +0,0 @@
-# HG changeset patch
-# User Robert O'Callahan <robert@ocallahan.org>
-# Date 1294019288 -46800
-# Node ID bacc54d452a9fddb5a0d6a1442ec7be4de81ffa7
-# Parent ccba8826be1451d0e61d0df38363dadffb20ba48
-Bug 593604. Part 2: When compositing a tee surface into another tee surface, try to compose the subsurfaces pointwise. r=jrmuizel,a=blocking
-
-diff --git a/gfx/cairo/cairo/src/cairo-tee-surface.c b/gfx/cairo/cairo/src/cairo-tee-surface.c
---- a/gfx/cairo/cairo/src/cairo-tee-surface.c
-+++ b/gfx/cairo/cairo/src/cairo-tee-surface.c
-@@ -186,35 +186,72 @@ static void
- _cairo_tee_surface_get_font_options (void *abstract_surface,
- cairo_font_options_t *options)
- {
- cairo_tee_surface_t *surface = abstract_surface;
-
- _cairo_surface_wrapper_get_font_options (&surface->master, options);
- }
-
-+static const cairo_pattern_t *
-+_cairo_tee_surface_match_source (cairo_tee_surface_t *surface,
-+ const cairo_pattern_t *source,
-+ int index,
-+ cairo_surface_wrapper_t *dest,
-+ cairo_surface_pattern_t *temp)
-+{
-+ cairo_surface_t *s;
-+ cairo_status_t status = cairo_pattern_get_surface ((cairo_pattern_t *)source, &s);
-+ if (status == CAIRO_STATUS_SUCCESS &&
-+ cairo_surface_get_type (s) == CAIRO_SURFACE_TYPE_TEE) {
-+ cairo_surface_t *tee_surf = cairo_tee_surface_index (s, index);
-+ if (tee_surf->status == CAIRO_STATUS_SUCCESS &&
-+ tee_surf->backend == dest->target->backend) {
-+ status = _cairo_pattern_init_copy (&temp->base, source);
-+ if (status == CAIRO_STATUS_SUCCESS) {
-+ cairo_surface_destroy (temp->surface);
-+ temp->surface = tee_surf;
-+ cairo_surface_reference (temp->surface);
-+ return &temp->base;
-+ }
-+ }
-+ }
-+
-+ return source;
-+}
-+
- static cairo_int_status_t
- _cairo_tee_surface_paint (void *abstract_surface,
- cairo_operator_t op,
- const cairo_pattern_t *source,
- cairo_clip_t *clip)
- {
- cairo_tee_surface_t *surface = abstract_surface;
- cairo_surface_wrapper_t *slaves;
- int n, num_slaves;
- cairo_status_t status;
-+ const cairo_pattern_t *matched_source;
-+ cairo_surface_pattern_t temp;
-
-- status = _cairo_surface_wrapper_paint (&surface->master, op, source, clip);
-+ matched_source = _cairo_tee_surface_match_source (surface, source, 0, &surface->master, &temp);
-+ status = _cairo_surface_wrapper_paint (&surface->master, op, matched_source, clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
-
- num_slaves = _cairo_array_num_elements (&surface->slaves);
- slaves = _cairo_array_index (&surface->slaves, 0);
- for (n = 0; n < num_slaves; n++) {
-- status = _cairo_surface_wrapper_paint (&slaves[n], op, source, clip);
-+ matched_source = _cairo_tee_surface_match_source (surface, source, n + 1, &slaves[n], &temp);
-+ status = _cairo_surface_wrapper_paint (&slaves[n], op, matched_source, clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
- }
-
- return CAIRO_STATUS_SUCCESS;
- }
-
- static cairo_int_status_t
-@@ -223,27 +260,37 @@ _cairo_tee_surface_mask (void *abstrac
- const cairo_pattern_t *source,
- const cairo_pattern_t *mask,
- cairo_clip_t *clip)
- {
- cairo_tee_surface_t *surface = abstract_surface;
- cairo_surface_wrapper_t *slaves;
- int n, num_slaves;
- cairo_status_t status;
-+ const cairo_pattern_t *matched_source;
-+ cairo_surface_pattern_t temp;
-
-+ matched_source = _cairo_tee_surface_match_source (surface, source, 0, &surface->master, &temp);
- status = _cairo_surface_wrapper_mask (&surface->master,
-- op, source, mask, clip);
-+ op, matched_source, mask, clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
-
- num_slaves = _cairo_array_num_elements (&surface->slaves);
- slaves = _cairo_array_index (&surface->slaves, 0);
- for (n = 0; n < num_slaves; n++) {
-+ matched_source = _cairo_tee_surface_match_source (surface, source, n + 1, &slaves[n], &temp);
- status = _cairo_surface_wrapper_mask (&slaves[n],
-- op, source, mask, clip);
-+ op, matched_source, mask, clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
- }
-
- return CAIRO_STATUS_SUCCESS;
- }
-
- static cairo_int_status_t
-@@ -257,35 +304,45 @@ _cairo_tee_surface_stroke (void *abst
- double tolerance,
- cairo_antialias_t antialias,
- cairo_clip_t *clip)
- {
- cairo_tee_surface_t *surface = abstract_surface;
- cairo_surface_wrapper_t *slaves;
- int n, num_slaves;
- cairo_status_t status;
-+ const cairo_pattern_t *matched_source;
-+ cairo_surface_pattern_t temp;
-
-+ matched_source = _cairo_tee_surface_match_source (surface, source, 0, &surface->master, &temp);
- status = _cairo_surface_wrapper_stroke (&surface->master,
-- op, source,
-+ op, matched_source,
- path, style,
- ctm, ctm_inverse,
- tolerance, antialias,
- clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
-
- num_slaves = _cairo_array_num_elements (&surface->slaves);
- slaves = _cairo_array_index (&surface->slaves, 0);
- for (n = 0; n < num_slaves; n++) {
-+ matched_source = _cairo_tee_surface_match_source (surface, source, n + 1, &slaves[n], &temp);
- status = _cairo_surface_wrapper_stroke (&slaves[n],
-- op, source,
-+ op, matched_source,
- path, style,
- ctm, ctm_inverse,
- tolerance, antialias,
- clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
- }
-
- return CAIRO_STATUS_SUCCESS;
- }
-
- static cairo_int_status_t
-@@ -297,33 +354,43 @@ _cairo_tee_surface_fill (void *abstra
- double tolerance,
- cairo_antialias_t antialias,
- cairo_clip_t *clip)
- {
- cairo_tee_surface_t *surface = abstract_surface;
- cairo_surface_wrapper_t *slaves;
- int n, num_slaves;
- cairo_status_t status;
-+ const cairo_pattern_t *matched_source;
-+ cairo_surface_pattern_t temp;
-
-+ matched_source = _cairo_tee_surface_match_source (surface, source, 0, &surface->master, &temp);
- status = _cairo_surface_wrapper_fill (&surface->master,
-- op, source,
-+ op, matched_source,
- path, fill_rule,
- tolerance, antialias,
- clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
-
- num_slaves = _cairo_array_num_elements (&surface->slaves);
- slaves = _cairo_array_index (&surface->slaves, 0);
- for (n = 0; n < num_slaves; n++) {
-+ matched_source = _cairo_tee_surface_match_source (surface, source, n + 1, &slaves[n], &temp);
- status = _cairo_surface_wrapper_fill (&slaves[n],
-- op, source,
-+ op, matched_source,
- path, fill_rule,
- tolerance, antialias,
- clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- return status;
- }
-
- return CAIRO_STATUS_SUCCESS;
- }
-
- static cairo_bool_t
-@@ -346,46 +413,56 @@ _cairo_tee_surface_show_text_glyphs (voi
- cairo_scaled_font_t *scaled_font,
- cairo_clip_t *clip)
- {
- cairo_tee_surface_t *surface = abstract_surface;
- cairo_surface_wrapper_t *slaves;
- int n, num_slaves;
- cairo_status_t status;
- cairo_glyph_t *glyphs_copy;
-+ const cairo_pattern_t *matched_source;
-+ cairo_surface_pattern_t temp;
-
- /* XXX: This copying is ugly. */
- glyphs_copy = _cairo_malloc_ab (num_glyphs, sizeof (cairo_glyph_t));
- if (unlikely (glyphs_copy == NULL))
- return _cairo_error (CAIRO_STATUS_NO_MEMORY);
-
- memcpy (glyphs_copy, glyphs, sizeof (cairo_glyph_t) * num_glyphs);
-+ matched_source = _cairo_tee_surface_match_source (surface, source, 0, &surface->master, &temp);
- status = _cairo_surface_wrapper_show_text_glyphs (&surface->master, op,
-- source,
-+ matched_source,
- utf8, utf8_len,
- glyphs_copy, num_glyphs,
- clusters, num_clusters,
- cluster_flags,
- scaled_font,
- clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- goto CLEANUP;
-
- num_slaves = _cairo_array_num_elements (&surface->slaves);
- slaves = _cairo_array_index (&surface->slaves, 0);
- for (n = 0; n < num_slaves; n++) {
- memcpy (glyphs_copy, glyphs, sizeof (cairo_glyph_t) * num_glyphs);
-+ matched_source = _cairo_tee_surface_match_source (surface, source, n + 1, &slaves[n], &temp);
- status = _cairo_surface_wrapper_show_text_glyphs (&slaves[n], op,
-- source,
-+ matched_source,
- utf8, utf8_len,
- glyphs_copy, num_glyphs,
- clusters, num_clusters,
- cluster_flags,
- scaled_font,
- clip);
-+ if (matched_source == &temp.base) {
-+ _cairo_pattern_fini (&temp.base);
-+ }
- if (unlikely (status))
- goto CLEANUP;
- }
-
- CLEANUP:
- free (glyphs_copy);
- return status;
- }