From 99341e058f378c1fbf940a065267802028418969 Mon Sep 17 00:00:00 2001 From: Izik Eidus Date: Wed, 14 Apr 2010 19:38:49 +0300 Subject: spice: server: change update_area command The new command return dirty area to be used by users that want spice to render localy or into some framebuffer (sdl / vnc) Signed-off-by: Izik Eidus --- common/region.c | 25 +++++++++++++++++++++++++ common/region.h | 1 + 2 files changed, 26 insertions(+) (limited to 'common') diff --git a/common/region.c b/common/region.c index 78d1dbcb..f3cf0b28 100644 --- a/common/region.c +++ b/common/region.c @@ -363,6 +363,31 @@ SpiceRect *region_dup_rects(const QRegion *rgn, uint32_t *num_rects) return rects; } +void region_ret_rects(const QRegion *rgn, SpiceRect *rects, uint32_t num_rects) +{ + pixman_box32_t *boxes; + int n, i; + + boxes = pixman_region32_rectangles((pixman_region32_t *)rgn, &n); + for (i = 0; i < n && i < num_rects; i++) { + rects[i].left = boxes[i].x1; + rects[i].top = boxes[i].y1; + rects[i].right = boxes[i].x2; + rects[i].bottom = boxes[i].y2; + } + + if (i && i != n) { + int x; + + for (x = 0; x < (n - num_rects); ++x) { + rects[i - 1].left = MIN(rects[i - 1].left, boxes[i + x].x1); + rects[i - 1].top = MIN(rects[i - 1].top, boxes[i + x].y1); + rects[i - 1].right = MAX(rects[i - 1].right, boxes[i + x].x2); + rects[i - 1].bottom = MAX(rects[i - 1].bottom, boxes[i + x].y2); + } + } +} + int region_is_equal(const QRegion *rgn1, const QRegion *rgn2) { diff --git a/common/region.h b/common/region.h index 7cc1a3be..223370d4 100644 --- a/common/region.h +++ b/common/region.h @@ -36,6 +36,7 @@ void region_clear(QRegion *rgn); void region_destroy(QRegion *rgn); void region_clone(QRegion *dest, const QRegion *src); SpiceRect *region_dup_rects(const QRegion *rgn, uint32_t *num_rects); +void region_ret_rects(const QRegion *rgn, SpiceRect *rects, uint32_t num_rects); int region_test(const QRegion *rgn, const QRegion *other_rgn, int query); int region_is_valid(const QRegion *rgn); -- cgit