diff options
| author | Izik Eidus <ieidus@redhat.com> | 2010-04-14 19:38:49 +0300 |
|---|---|---|
| committer | Marc-André Lureau <marcandre.lureau@gmail.com> | 2012-03-20 15:25:41 +0100 |
| commit | b080f39fd1ef8decc6d673915f1a3e6506ceeb4e (patch) | |
| tree | d73acc521b3135ca0dd5412e1ee572167bdec03c | |
| parent | 92e30df45c80822ed09ce7ce6c7c4f7e09a69c0e (diff) | |
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 <ieidus@redhat.com>
| -rw-r--r-- | common/region.c | 25 | ||||
| -rw-r--r-- | common/region.h | 1 |
2 files changed, 26 insertions, 0 deletions
diff --git a/common/region.c b/common/region.c index 78d1dbc..f3cf0b2 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 7cc1a3b..223370d 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); |
