michael@0: From b79ea8a6cab8bd28aebecf6e1e8229d5ac017264 Mon Sep 17 00:00:00 2001 michael@0: From: Karl Tomlinson michael@0: Date: Fri, 16 Jul 2010 23:46:25 +0000 michael@0: Subject: clip: consider all_clipped in _cairo_clip_get_extents michael@0: michael@0: If the gstate clip in _cairo_gstate_int_clip_extents() has all_clipped michael@0: set (and path NULL), then it returns the gstate target extents instead of michael@0: an empty rectangle. If the target is infinite, then it says the clip is michael@0: unbounded. michael@0: michael@0: Fixes https://bugs.freedesktop.org/show_bug.cgi?id=29124 michael@0: Tested-by test/get-clip michael@0: michael@0: Reviewed-by: Chris Wilson michael@0: --- michael@0: diff --git a/src/cairo-clip.c b/src/cairo-clip.c michael@0: index f6173c6..77d8214 100644 michael@0: --- a/src/cairo-clip.c michael@0: +++ b/src/cairo-clip.c michael@0: @@ -1264,9 +1264,14 @@ _cairo_clip_combine_with_surface (cairo_clip_t *clip, michael@0: return CAIRO_STATUS_SUCCESS; michael@0: } michael@0: michael@0: +static const cairo_rectangle_int_t _cairo_empty_rectangle_int = { 0, 0, 0, 0 }; michael@0: + michael@0: const cairo_rectangle_int_t * michael@0: _cairo_clip_get_extents (const cairo_clip_t *clip) michael@0: { michael@0: + if (clip->all_clipped) michael@0: + return &_cairo_empty_rectangle_int; michael@0: + michael@0: if (clip->path == NULL) michael@0: return NULL; michael@0: michael@0: diff --git a/test/get-clip.c b/test/get-clip.c michael@0: index 9d6e796..f0477a1 100644 michael@0: --- a/test/get-clip.c michael@0: +++ b/test/get-clip.c michael@0: @@ -83,6 +83,8 @@ check_clip_extents (const cairo_test_context_t *ctx, michael@0: cairo_clip_extents (cr, &ext_x1, &ext_y1, &ext_x2, &ext_y2); michael@0: if (ext_x1 == x && ext_y1 == y && ext_x2 == x + width && ext_y2 == y + height) michael@0: return 1; michael@0: + if (width == 0.0 && height == 0.0 && ext_x1 == ext_x2 && ext_y1 == ext_y2) michael@0: + return 1; michael@0: cairo_test_log (ctx, "Error: %s; clip extents %f,%f,%f,%f should be %f,%f,%f,%f\n", michael@0: message, ext_x1, ext_y1, ext_x2 - ext_x1, ext_y2 - ext_y1, michael@0: x, y, width, height); michael@0: @@ -138,7 +140,8 @@ preamble (cairo_test_context_t *ctx) michael@0: cairo_save (cr); michael@0: cairo_clip (cr); michael@0: rectangle_list = cairo_copy_clip_rectangle_list (cr); michael@0: - if (! check_count (ctx, phase, rectangle_list, 0)) michael@0: + if (! check_count (ctx, phase, rectangle_list, 0) || michael@0: + ! check_clip_extents (ctx, phase, cr, 0, 0, 0, 0)) michael@0: { michael@0: goto FAIL; michael@0: } michael@0: -- michael@0: cgit v0.8.3-6-g21f6