[PATCH weston 3/3] compositor: turn weston_view boundingbox into masked

Giulio Camuffo giuliocamuffo at gmail.com
Mon Feb 23 10:43:16 PST 2015


The other two in the series look good to me, i have a nitpick below
for this one.
With that fixed, and for the other ones:
Reviewed-By: Giulio Camuffo <giuliocamuffo at gmail.com>

2015-02-19 11:27 GMT+02:00 Pekka Paalanen <ppaalanen at gmail.com>:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> weston_view::transform.boundingbox is made to include the layer mask,
> which removes the need for masked_boundingbox.
>
> The following were using boundingbox when they should have used
> masked_boundingbox:
> - drm_output_prepare_overlay_view() uses boundingbox to compute overlay
>   position, source and destination coordinates.
> - drm_assign_planes() uses boundingbox for view overlap checks.
> - is_view_not_visible() uses boundingbox, but nothing will show outside
>   the layer mask.
> - weston_surface_assign_output() intersects boundingbox with output
>   region to choose the primary output for a surface.
> - weston_view_assign_output() intersects boundingbox with output region
>   to pick the outputs the view is on.
>
> This patch essentially changes all those cases to use the masked
> boundingbox.
>
> Therefore there are no cases which would need the boundingbox without
> the layer mask, and we can convert boundingbox into masked and remove
> the left-over member.
>
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> Cc: Giulio Camuffo <giuliocamuffo at gmail.com>
> ---
>  src/compositor.c      | 14 ++++++--------
>  src/compositor.h      |  1 -
>  src/gl-renderer.c     |  2 +-
>  src/pixman-renderer.c |  2 +-
>  4 files changed, 8 insertions(+), 11 deletions(-)
>
> diff --git a/src/compositor.c b/src/compositor.c
> index 70a7768..fdafcaf 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -443,7 +443,6 @@ weston_view_create(struct weston_surface *surface)
>         wl_list_init(&view->layer_link.link);
>
>         pixman_region32_init(&view->clip);
> -       pixman_region32_init(&view->transform.masked_boundingbox);
>
>         view->alpha = 1.0;
>         pixman_region32_init(&view->transform.opaque);
> @@ -964,7 +963,7 @@ weston_view_damage_below(struct weston_view *view)
>         pixman_region32_t damage;
>
>         pixman_region32_init(&damage);
> -       pixman_region32_subtract(&damage, &view->transform.masked_boundingbox,
> +       pixman_region32_subtract(&damage, &view->transform.boundingbox,
>                                  &view->clip);
>         if (view->plane)
>                 pixman_region32_union(&view->plane->damage,
> @@ -1203,7 +1202,6 @@ weston_view_update_transform(struct weston_view *view)
>  {
>         struct weston_view *parent = view->geometry.parent;
>         struct weston_layer *layer;
> -       pixman_region32_t mask;
>
>         if (!view->transform.dirty)
>                 return;
> @@ -1233,9 +1231,11 @@ weston_view_update_transform(struct weston_view *view)
>
>         layer = get_view_layer(view);
>         if (layer) {
> +               pixman_region32_t mask;

Why did you move the mask here? That isn't compliant with the wayland style.

> +
>                 pixman_region32_init_with_extents(&mask, &layer->mask);
> -               pixman_region32_intersect(&view->transform.masked_boundingbox,
> -                                       &view->transform.boundingbox, &mask);
> +               pixman_region32_intersect(&view->transform.boundingbox,
> +                                         &view->transform.boundingbox, &mask);
>                 pixman_region32_intersect(&view->transform.opaque,
>                                           &view->transform.opaque, &mask);
>                 pixman_region32_fini(&mask);
> @@ -1538,8 +1538,7 @@ weston_compositor_pick_view(struct weston_compositor *compositor,
>         wl_list_for_each(view, &compositor->view_list, link) {
>                 weston_view_from_global_fixed(view, x, y, vx, vy);
>                 if (pixman_region32_contains_point(
> -                       &view->transform.masked_boundingbox,
> -                                                  ix, iy, NULL) &&
> +                       &view->transform.boundingbox, ix, iy, NULL) &&
>                     pixman_region32_contains_point(&view->surface->input,
>                                                    wl_fixed_to_int(*vx),
>                                                    wl_fixed_to_int(*vy),
> @@ -1632,7 +1631,6 @@ weston_view_destroy(struct weston_view *view)
>
>         pixman_region32_fini(&view->clip);
>         pixman_region32_fini(&view->transform.boundingbox);
> -       pixman_region32_fini(&view->transform.masked_boundingbox);
>         pixman_region32_fini(&view->transform.opaque);
>
>         weston_view_set_transform_parent(view, NULL);
> diff --git a/src/compositor.h b/src/compositor.h
> index f746258..e356e33 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -793,7 +793,6 @@ struct weston_view {
>
>                 pixman_region32_t boundingbox;
>                 pixman_region32_t opaque;
> -               pixman_region32_t masked_boundingbox;
>
>                 /* matrix and inverse are used only if enabled = 1.
>                  * If enabled = 0, use x, y, width, height directly.
> diff --git a/src/gl-renderer.c b/src/gl-renderer.c
> index bb46acd..3a70c3b 100644
> --- a/src/gl-renderer.c
> +++ b/src/gl-renderer.c
> @@ -604,7 +604,7 @@ draw_view(struct weston_view *ev, struct weston_output *output,
>
>         pixman_region32_init(&repaint);
>         pixman_region32_intersect(&repaint,
> -                                 &ev->transform.masked_boundingbox, damage);
> +                                 &ev->transform.boundingbox, damage);
>         pixman_region32_subtract(&repaint, &repaint, &ev->clip);
>
>         if (!pixman_region32_not_empty(&repaint))
> diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
> index 530e2ed..937df8f 100644
> --- a/src/pixman-renderer.c
> +++ b/src/pixman-renderer.c
> @@ -398,7 +398,7 @@ draw_view(struct weston_view *ev, struct weston_output *output,
>
>         pixman_region32_init(&repaint);
>         pixman_region32_intersect(&repaint,
> -                                 &ev->transform.masked_boundingbox, damage);
> +                                 &ev->transform.boundingbox, damage);
>         pixman_region32_subtract(&repaint, &repaint, &ev->clip);
>
>         if (!pixman_region32_not_empty(&repaint))
> --
> 2.0.5
>


More information about the wayland-devel mailing list