mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-02-18 06:00:47 +01:00
clip: consider all_clipped in _cairo_clip_get_extents
If the gstate clip in _cairo_gstate_int_clip_extents() has all_clipped set (and path NULL), then it returns the gstate target extents instead of an empty rectangle. If the target is infinite, then it says the clip is unbounded. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=29124 Tested-by test/get-clip Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
6a51159013
commit
b79ea8a6ca
2 changed files with 9 additions and 1 deletions
|
|
@ -1264,9 +1264,14 @@ _cairo_clip_combine_with_surface (cairo_clip_t *clip,
|
|||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static const cairo_rectangle_int_t _cairo_empty_rectangle_int = { 0, 0, 0, 0 };
|
||||
|
||||
const cairo_rectangle_int_t *
|
||||
_cairo_clip_get_extents (const cairo_clip_t *clip)
|
||||
{
|
||||
if (clip->all_clipped)
|
||||
return &_cairo_empty_rectangle_int;
|
||||
|
||||
if (clip->path == NULL)
|
||||
return NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,8 @@ check_clip_extents (const cairo_test_context_t *ctx,
|
|||
cairo_clip_extents (cr, &ext_x1, &ext_y1, &ext_x2, &ext_y2);
|
||||
if (ext_x1 == x && ext_y1 == y && ext_x2 == x + width && ext_y2 == y + height)
|
||||
return 1;
|
||||
if (width == 0.0 && height == 0.0 && ext_x1 == ext_x2 && ext_y1 == ext_y2)
|
||||
return 1;
|
||||
cairo_test_log (ctx, "Error: %s; clip extents %f,%f,%f,%f should be %f,%f,%f,%f\n",
|
||||
message, ext_x1, ext_y1, ext_x2 - ext_x1, ext_y2 - ext_y1,
|
||||
x, y, width, height);
|
||||
|
|
@ -138,7 +140,8 @@ preamble (cairo_test_context_t *ctx)
|
|||
cairo_save (cr);
|
||||
cairo_clip (cr);
|
||||
rectangle_list = cairo_copy_clip_rectangle_list (cr);
|
||||
if (! check_count (ctx, phase, rectangle_list, 0))
|
||||
if (! check_count (ctx, phase, rectangle_list, 0) ||
|
||||
! check_clip_extents (ctx, phase, cr, 0, 0, 0, 0))
|
||||
{
|
||||
goto FAIL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue