diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-02-17 16:09:27 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-02-23 22:52:06 +0100 |
commit | d430a6c79b8ca4d0823172bb668ca460e9513306 (patch) | |
tree | 8ed5a022f6f62393f9ef8061356a6e5a50f7a129 /common | |
parent | ceff9ca6428d5cb3768d87c9cd9bcba19831d344 (diff) | |
download | spice-d430a6c79b8ca4d0823172bb668ca460e9513306.tar.gz spice-d430a6c79b8ca4d0823172bb668ca460e9513306.tar.xz spice-d430a6c79b8ca4d0823172bb668ca460e9513306.zip |
Convert cairo canvas group_start/end to pixman
Diffstat (limited to 'common')
-rw-r--r-- | common/cairo_canvas.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/common/cairo_canvas.c b/common/cairo_canvas.c index 25fb079b..c73bfbda 100644 --- a/common/cairo_canvas.c +++ b/common/cairo_canvas.c @@ -2139,26 +2139,30 @@ void canvas_read_bits(CairoCanvas *canvas, uint8_t *dest, int dest_stride, const void canvas_group_start(CairoCanvas *canvas, int n_clip_rects, SpiceRect *clip_rects) { - cairo_t *cairo = canvas->cairo; + pixman_region32_t dest_region; - cairo_save(cairo); + pixman_region32_fini(&canvas->canvas_region); + spice_pixman_region32_init_rects(&canvas->canvas_region, + clip_rects, n_clip_rects); - if (n_clip_rects) { - SpiceRect *end = clip_rects + n_clip_rects; - for (; clip_rects < end; clip_rects++) { - cairo_rectangle(cairo, - clip_rects->left, - clip_rects->top, - clip_rects->right - clip_rects->left, - clip_rects->bottom - clip_rects->top); - } - cairo_clip(cairo); - } + pixman_region32_init_rect(&dest_region, + 0, 0, + pixman_image_get_width(canvas->image), + pixman_image_get_height(canvas->image)); + + /* Make sure we always clip to canvas size */ + pixman_region32_intersect(&canvas->canvas_region, &canvas->canvas_region, &dest_region); + + pixman_region32_fini(&dest_region); } void canvas_group_end(CairoCanvas *canvas) { - cairo_restore(canvas->cairo); + pixman_region32_fini(&canvas->canvas_region); + pixman_region32_init_rect(&canvas->canvas_region, + 0, 0, + pixman_image_get_width(canvas->image), + pixman_image_get_height(canvas->image)); } void canvas_clear(CairoCanvas *canvas) |