diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-29 11:42:59 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-29 11:44:21 +0100 |
commit | aac9b261762cdb8039daedfe63a56a83faa0155f (patch) | |
tree | 1f6ef0a27f0345ffb23a5b78044013303342751d /src/cairo-clip.c | |
parent | ecafad7149cb80bad56cc042ced4bb06c106ce1a (diff) | |
download | cairo-aac9b261762cdb8039daedfe63a56a83faa0155f.tar.gz |
clip: Fix cairo_clip_equal()
In haste, I completely removed the implementation...
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-clip.c')
-rw-r--r-- | src/cairo-clip.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/cairo-clip.c b/src/cairo-clip.c index a90c69873..b01093efb 100644 --- a/src/cairo-clip.c +++ b/src/cairo-clip.c @@ -340,11 +340,45 @@ cairo_bool_t _cairo_clip_equal (const cairo_clip_t *clip_a, const cairo_clip_t *clip_b) { + const cairo_clip_path_t *cp_a, *cp_b; + /* are both all-clipped or no-clip? */ if (clip_a == clip_b) return TRUE; - return FALSE; + if (clip_a->num_boxes != clip_b->num_boxes) + return FALSE; + + if (memcmp (clip_a->boxes, clip_b->boxes, + sizeof (cairo_box_t) * clip_a->num_boxes)) + return FALSE; + + cp_a = clip_a->path; + cp_b = clip_b->path; + while (cp_a && cp_b) { + if (cp_a == cp_b) + return TRUE; + + /* XXX compare reduced polygons? */ + + if (cp_a->antialias != cp_b->antialias) + return FALSE; + + if (cp_a->tolerance != cp_b->tolerance) + return FALSE; + + if (cp_a->fill_rule != cp_b->fill_rule) + return FALSE; + + if (! _cairo_path_fixed_equal (&cp_a->path, + &cp_b->path)) + return FALSE; + + cp_a = cp_a->prev; + cp_b = cp_b->prev; + } + + return cp_a == NULL && cp_b == NULL; } static cairo_clip_t * |