[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