summaryrefslogtreecommitdiff
path: root/src/cairo-traps-compositor.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-02-12 11:25:07 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-02-15 14:37:11 +0000
commitae3319890eacd1c8282ca6df7b263ac74abb5f8d (patch)
tree16b1f4bab9bcd4cbb13f5e15b01696c788d46203 /src/cairo-traps-compositor.c
parent92c0b37d04f9df8df53a455c8e8dda1946c84c87 (diff)
downloadcairo-ae3319890eacd1c8282ca6df7b263ac74abb5f8d.tar.gz
win32: Rebase on the new compositor infrastructure
Try and undo all the damage that has acrued over the years by plugging into the compositor pipeline. References: https://bugs.freedesktop.org/show_bug.cgi?id=42739 References: https://bugs.freedesktop.org/show_bug.cgi?id=42821 References: https://bugs.freedesktop.org/show_bug.cgi?id=33081 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-traps-compositor.c')
-rw-r--r--src/cairo-traps-compositor.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/cairo-traps-compositor.c b/src/cairo-traps-compositor.c
index b4351806e..a9f8c75c3 100644
--- a/src/cairo-traps-compositor.c
+++ b/src/cairo-traps-compositor.c
@@ -167,6 +167,8 @@ combine_clip_as_traps (const cairo_traps_compositor_t *compositor,
int src_x, src_y;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = _cairo_clip_get_polygon (clip, &polygon,
&fill_rule, &antialias);
if (status)
@@ -209,6 +211,8 @@ traps_get_clip_surface (const cairo_traps_compositor_t *compositor,
cairo_surface_t *surface;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
surface = _cairo_surface_create_similar_solid (target,
CAIRO_CONTENT_ALPHA,
extents->width,
@@ -247,6 +251,8 @@ create_composite_mask (const cairo_traps_compositor_t *compositor,
int src_x, src_y;
int i;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
surface = _cairo_surface_create_similar_solid (dst,
CAIRO_CONTENT_ALPHA,
extents->bounded.width,
@@ -351,6 +357,8 @@ clip_and_composite_with_mask (const cairo_traps_compositor_t *compositor,
cairo_surface_t *dst = extents->surface;
cairo_surface_t *mask;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
mask = create_composite_mask (compositor, dst, draw_closure,
draw_func, mask_func,
extents);
@@ -396,6 +404,8 @@ clip_and_composite_combine (const cairo_traps_compositor_t *compositor,
cairo_surface_t *tmp, *clip;
cairo_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
tmp = _cairo_surface_create_similar_scratch (dst, dst->content,
extents->bounded.width,
extents->bounded.height);
@@ -467,6 +477,8 @@ clip_and_composite_source (const cairo_traps_compositor_t *compositor,
{
cairo_surface_t *mask;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
/* Create a surface that is mask IN clip */
mask = create_composite_mask (compositor, dst, draw_closure,
draw_func, mask_func,
@@ -531,6 +543,8 @@ fixup_unbounded_with_mask (const cairo_traps_compositor_t *compositor,
cairo_clip_t *clip = extents->clip;
cairo_surface_t *mask;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
/* XXX can we avoid querying the clip surface again? */
mask = traps_get_clip_surface (compositor, dst, clip, &extents->unbounded);
if (unlikely (mask->status))
@@ -622,6 +636,8 @@ fixup_unbounded (const cairo_traps_compositor_t *compositor,
cairo_box_t box;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (extents->bounded.width == extents->unbounded.width &&
extents->bounded.height == extents->unbounded.height)
{
@@ -772,6 +788,8 @@ clip_and_composite (const cairo_traps_compositor_t *compositor,
cairo_region_t *clip_region = NULL;
cairo_status_t status = CAIRO_STATUS_SUCCESS;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (reduce_alpha_op (extents)) {
op = CAIRO_OPERATOR_ADD;
source = NULL;
@@ -882,6 +900,8 @@ composite_traps (const cairo_traps_compositor_t *compositor,
{
composite_traps_info_t *info = closure;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
return compositor->composite_traps (dst, op, src,
src_x - dst_x, src_y - dst_y,
dst_x, dst_y,
@@ -907,6 +927,8 @@ composite_tristrip (const cairo_traps_compositor_t *compositor,
{
composite_tristrip_info_t *info = closure;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
return compositor->composite_tristrip (dst, op, src,
src_x - dst_x, src_y - dst_y,
dst_x, dst_y,
@@ -985,6 +1007,8 @@ composite_aligned_boxes (const cairo_traps_compositor_t *compositor,
cairo_bool_t op_is_source;
cairo_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (need_clip_mask &&
(! extents->is_bounded || extents->op == CAIRO_OPERATOR_SOURCE))
{
@@ -1107,6 +1131,8 @@ upload_boxes (const cairo_traps_compositor_t *compositor,
cairo_int_status_t status;
int tx, ty;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
src = _cairo_pattern_get_source((cairo_surface_pattern_t *)source,
&limit);
if (!(src->type == CAIRO_SURFACE_TYPE_IMAGE || src->type == dst->type))
@@ -1258,6 +1284,8 @@ clip_and_composite_polygon (const cairo_traps_compositor_t *compositor,
cairo_bool_t clip_surface = ! _cairo_clip_is_region (extents->clip);
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (polygon->num_edges == 0) {
status = CAIRO_INT_STATUS_SUCCESS;
@@ -1426,6 +1454,8 @@ composite_opacity_boxes (const cairo_traps_compositor_t *compositor,
struct composite_opacity_info info;
int i;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
info.compositor = compositor;
info.op = op;
info.dst = dst;
@@ -1460,6 +1490,8 @@ composite_boxes (const cairo_traps_compositor_t *compositor,
cairo_traps_t traps;
cairo_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = _cairo_traps_init_boxes (&traps, closure);
if (unlikely (status))
return status;
@@ -1481,6 +1513,8 @@ clip_and_composite_boxes (const cairo_traps_compositor_t *compositor,
{
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (boxes->num_boxes == 0 && extents->is_bounded)
return CAIRO_STATUS_SUCCESS;
@@ -1549,6 +1583,8 @@ composite_traps_as_boxes (const cairo_traps_compositor_t *compositor,
{
cairo_boxes_t boxes;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (! _cairo_traps_to_boxes (&info->traps, info->antialias, &boxes))
return CAIRO_INT_STATUS_UNSUPPORTED;
@@ -1562,6 +1598,8 @@ clip_and_composite_traps (const cairo_traps_compositor_t *compositor,
{
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = trim_extents_to_traps (extents, &info->traps);
if (unlikely (status != CAIRO_INT_STATUS_SUCCESS))
return status;
@@ -1596,6 +1634,8 @@ clip_and_composite_tristrip (const cairo_traps_compositor_t *compositor,
cairo_int_status_t status;
unsigned int flags = 0;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = trim_extents_to_tristrip (extents, &info->strip);
if (unlikely (status != CAIRO_INT_STATUS_SUCCESS))
return status;
@@ -1630,6 +1670,8 @@ composite_mask (const cairo_traps_compositor_t *compositor,
{
struct composite_mask *data = closure;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (src != NULL) {
compositor->composite (dst, op, src, data->mask,
extents->x + src_x, extents->y + src_y,
@@ -1663,6 +1705,8 @@ static void composite_box(void *closure,
struct composite_box_info *info = closure;
const cairo_traps_compositor_t *compositor = info->compositor;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (! CAIRO_ALPHA_SHORT_IS_OPAQUE (coverage)) {
cairo_surface_t *mask;
cairo_color_t color;
@@ -1712,6 +1756,8 @@ composite_mask_clip_boxes (const cairo_traps_compositor_t *compositor,
struct composite_box_info info;
int i;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
info.compositor = compositor;
info.op = CAIRO_OPERATOR_SOURCE;
info.dst = dst;
@@ -1747,6 +1793,8 @@ composite_mask_clip (const cairo_traps_compositor_t *compositor,
composite_traps_info_t info;
cairo_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = _cairo_clip_get_polygon (clip, &polygon,
&fill_rule, &info.antialias);
if (unlikely (status))
@@ -1781,6 +1829,8 @@ _cairo_traps_compositor_paint (const cairo_compositor_t *_compositor,
cairo_boxes_t boxes;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = compositor->check_composite (extents);
if (unlikely (status))
return status;
@@ -1799,6 +1849,8 @@ _cairo_traps_compositor_mask (const cairo_compositor_t *_compositor,
const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t*)_compositor;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = compositor->check_composite (extents);
if (unlikely (status))
return status;
@@ -1820,6 +1872,8 @@ _cairo_traps_compositor_mask (const cairo_compositor_t *_compositor,
&extents->mask_sample_area,
&data.mask_x,
&data.mask_y);
+ if (unlikely (data.mask->status))
+ return data.mask->status;
status = clip_and_composite (compositor, extents,
composite_mask,
@@ -1845,6 +1899,8 @@ _cairo_traps_compositor_stroke (const cairo_compositor_t *_compositor,
const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = compositor->check_composite (extents);
if (unlikely (status))
return status;
@@ -1908,6 +1964,8 @@ _cairo_traps_compositor_fill (const cairo_compositor_t *_compositor,
const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = compositor->check_composite (extents);
if (unlikely (status))
return status;
@@ -1975,6 +2033,8 @@ composite_glyphs (const cairo_traps_compositor_t *compositor,
{
cairo_composite_glyphs_info_t *info = closure;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
if (op == CAIRO_OPERATOR_ADD && (dst->content & CAIRO_CONTENT_COLOR) == 0)
info->use_mask = 0;
@@ -1995,6 +2055,8 @@ _cairo_traps_compositor_glyphs (const cairo_compositor_t *_compositor,
const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor;
cairo_int_status_t status;
+ TRACE ((stderr, "%s\n", __FUNCTION__));
+
status = compositor->check_composite (extents);
if (unlikely (status))
return status;