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>
This commit is contained in:
Izik Eidus 2010-04-14 19:38:49 +03:00 committed by Marc-André Lureau
parent 92e30df45c
commit b080f39fd1
2 changed files with 26 additions and 0 deletions

View File

@ -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)
{

View File

@ -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);