diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-03-03 16:43:36 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-03-08 19:45:28 +0100 |
commit | 18606d99eaf11dbceb79dc24f0a41e85345db300 (patch) | |
tree | 2bd69130cc798cdcee43443fb6eae14b94a5b88c /common/canvas_base.c | |
parent | f8217d8b96f35fd297c74df1da6428b56b01149a (diff) | |
download | spice-18606d99eaf11dbceb79dc24f0a41e85345db300.tar.gz spice-18606d99eaf11dbceb79dc24f0a41e85345db300.tar.xz spice-18606d99eaf11dbceb79dc24f0a41e85345db300.zip |
Move canvas_region and group_start/end to canvas_base
Diffstat (limited to 'common/canvas_base.c')
-rw-r--r-- | common/canvas_base.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/common/canvas_base.c b/common/canvas_base.c index 2a946076..4bf2be7e 100644 --- a/common/canvas_base.c +++ b/common/canvas_base.c @@ -184,6 +184,10 @@ typedef struct CanvasBase { unsigned long max; #endif + int width; + int height; + pixman_region32_t canvas_region; + #if defined(CAIRO_CANVAS_CACHE) || defined(CAIRO_CANVAS_IMAGE_CACHE) SpiceImageCache *bits_cache; #endif @@ -1578,6 +1582,31 @@ void *spice_canvas_get_usr_data(SpiceCanvas *spice_canvas) } #endif +static void canvas_base_group_start(SpiceCanvas *spice_canvas, QRegion *region) +{ + CanvasBase *canvas = (CanvasBase *)spice_canvas; + pixman_region32_fini(&canvas->canvas_region); + + /* Make sure we always clip to canvas size */ + pixman_region32_init_rect(&canvas->canvas_region, + 0, 0, + canvas->width, + canvas->height); + + pixman_region32_intersect(&canvas->canvas_region, &canvas->canvas_region, region); +} + +static void canvas_base_group_end(SpiceCanvas *spice_canvas) +{ + CanvasBase *canvas = (CanvasBase *)spice_canvas; + pixman_region32_fini(&canvas->canvas_region); + pixman_region32_init_rect(&canvas->canvas_region, + 0, 0, + canvas->width, + canvas->height); +} + + static void unimplemented_op(SpiceCanvas *canvas) { PANIC("unimplemented canvas operation"); @@ -1592,9 +1621,13 @@ inline static void canvas_base_init_ops(SpiceCanvasOps *ops) for (i = 0; i < sizeof(SpiceCanvasOps) / sizeof(void *); i++) { ops_cast[i] = (void *) unimplemented_op; } + + ops->group_start = canvas_base_group_start; + ops->group_end = canvas_base_group_end; } -static int canvas_base_init(CanvasBase *canvas, SpiceCanvasOps *ops, int depth +static int canvas_base_init(CanvasBase *canvas, SpiceCanvasOps *ops, + int width, int height, int depth #ifdef CAIRO_CANVAS_CACHE , SpiceImageCache *bits_cache , SpicePaletteCache *palette_cache @@ -1643,6 +1676,12 @@ static int canvas_base_init(CanvasBase *canvas, SpiceCanvasOps *ops, int depth canvas->color_mask = 0xff; } + canvas->width = width; + canvas->height = height; + pixman_region32_init_rect(&canvas->canvas_region, + 0, 0, + canvas->width, + canvas->height); #if defined(CAIRO_CANVAS_CACHE) || defined(CAIRO_CANVAS_IMAGE_CACHE) canvas->bits_cache = bits_cache; |