[Spice-devel] [PATCH 18/18] display: factor out current_find_intersects_rect
Fabiano Fidêncio
fidencio at redhat.com
Mon Nov 23 11:08:02 PST 2015
On Mon, Nov 23, 2015 at 6:02 PM, Frediano Ziglio <fziglio at redhat.com> wrote:
> From: Marc-André Lureau <marcandre.lureau at gmail.com>
>
> ---
> server/display-channel.c | 51 ++++++++++++++++++++++++++++--------------------
> 1 file changed, 30 insertions(+), 21 deletions(-)
>
> diff --git a/server/display-channel.c b/server/display-channel.c
> index a78f86a..ab70947 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -1299,6 +1299,30 @@ static void draw_until(DisplayChannel *display, RedSurface *surface, Drawable *l
> } while (now != last);
> }
>
> +static Drawable* current_find_intersects_rect(Ring *current, const SpiceRect *area)
> +{
> + Ring *ring;
> + RingItem *ring_item;
> + QRegion rgn;
> + Drawable *last = NULL, *now;
> +
> + ring = current;
> + ring_item = ring;
> + region_init(&rgn);
> + region_add(&rgn, area);
> +
> + while ((ring_item = ring_next(ring, ring_item))) {
> + now = SPICE_CONTAINEROF(ring_item, Drawable, surface_list_link);
> + if (region_intersects(&rgn, &now->tree_item.base.rgn)) {
> + last = now;
> + break;
> + }
> + }
> +
> + region_destroy(&rgn);
> + return last;
> +}
> +
> /*
> * Renders drawables for updating the requested area, but only drawables that are older
> * than 'last' (exclusive).
> @@ -1376,10 +1400,8 @@ void display_channel_draw_till(DisplayChannel *display, const SpiceRect *area, i
> void display_channel_draw(DisplayChannel *display, const SpiceRect *area, int surface_id)
> {
> RedSurface *surface;
> - Ring *ring;
> - RingItem *ring_item;
> - QRegion rgn;
> - Drawable *last, *now;
> + Drawable *last;
> +
> spice_debug("surface %d: area ==>", surface_id);
> rect_debug(area);
>
> @@ -1390,23 +1412,10 @@ void display_channel_draw(DisplayChannel *display, const SpiceRect *area, int su
>
> surface = &display->surfaces[surface_id];
>
> - last = NULL;
> - ring = &surface->current_list;
> - ring_item = ring;
> -
> - region_init(&rgn);
> - region_add(&rgn, area);
> - while ((ring_item = ring_next(ring, ring_item))) {
> - now = SPICE_CONTAINEROF(ring_item, Drawable, surface_list_link);
> - if (region_intersects(&rgn, &now->tree_item.base.rgn)) {
> - last = now;
> - break;
> - }
> - }
> - region_destroy(&rgn);
> -
> - if (last)
> - draw_until(display, surface, last);
> + last = current_find_intersects_rect(&surface->current_list, area);
> + if (!last)
> + return;
>
> + draw_until(display, surface, last);
> surface_update_dest(surface, area);
> }
> --
> 2.4.3
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
Looks good!
Acked-by: Fabiano Fidêncio <fidencio at redhat.com>
More information about the Spice-devel
mailing list