From 2ef9c7d9e8fcd0bda138f2b1965b3b06491cae00 Mon Sep 17 00:00:00 2001 From: Jinghua Luo Date: Sat, 21 Oct 2006 17:07:19 +0800 Subject: [PATCH] glitz: fix a crash in _cairo_glitz_surface_get_image. The previous changes in _cairo_glitz_surface_get_image causes test clip-fill-rule-pixel-aligned and clip-fill-rule fail with a pretty crash, this fix that. --- src/cairo-glitz-surface.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cairo-glitz-surface.c b/src/cairo-glitz-surface.c index 5310e2294..52272caf8 100644 --- a/src/cairo-glitz-surface.c +++ b/src/cairo-glitz-surface.c @@ -208,8 +208,9 @@ _cairo_glitz_surface_get_image (cairo_glitz_surface_t *surface, } /* clear out the glitz clip; the clip affects glitz_get_pixels */ - glitz_surface_set_clip_region (surface->surface, - 0, 0, NULL, 0); + if (surface->clip) + glitz_surface_set_clip_region (surface->surface, + 0, 0, NULL, 0); glitz_get_pixels (surface->surface, x1, y1, @@ -220,8 +221,14 @@ _cairo_glitz_surface_get_image (cairo_glitz_surface_t *surface, glitz_buffer_destroy (buffer); /* restore the clip, if any */ - surface->base.current_clip_serial = 0; - _cairo_surface_set_clip (&surface->base, surface->base.clip); + if (surface->clip) { + glitz_box_t *box; + int n; + + box = (glitz_box_t *) pixman_region_rects (surface->clip); + n = pixman_region_num_rects (surface->clip); + glitz_surface_set_clip_region (surface->surface, 0, 0, box, n); + } image = (cairo_image_surface_t *) _cairo_image_surface_create_with_masks (pixels,