[PATCH] Support on-the-fly transparency changes in pixman renderer
Kristian Høgsberg
hoegsberg at gmail.com
Sun Apr 6 22:59:26 PDT 2014
On Sat, Apr 05, 2014 at 05:31:37AM +0200, Manuel Bachmann wrote:
> When the alpha channel of a surface is changed and the surface
> refreshed, pixman renderer will now apply a mask corresponding
> to the alpha channel value.
>
> This allows visual effects like shell fade in, shell fade out,
> window switching, to work when using pixman renderer.
>
> Signed-off-by: Manuel Bachmann <manuel.bachmann at open.eurogiciel.org>
> ---
> src/pixman-renderer.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
> index b999343..eff7201 100644
> --- a/src/pixman-renderer.c
> +++ b/src/pixman-renderer.c
> @@ -340,9 +340,16 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
> if (ps->buffer_ref.buffer)
> wl_shm_buffer_begin_access(ps->buffer_ref.buffer->shm_buffer);
>
> + pixman_image_t *mask_image;
> + if (ev->alpha < 1.0) {
> + pixman_color_t mask = { 0x0000, 0x0000, 0x0000, 0xffff*ev->alpha };
> + mask_image = pixman_image_create_solid_fill(&mask);
> + } else
> + mask_image = NULL;
I like this but it doesn't quite look right, it looks like the surface also fades
from black. I also doesn't see it trigger on the close window fade anmation.
And stylistically, please don't mix code and declarations (move mask_image
declartion up) and use braces for both branches (the rule is both or none).
> pixman_image_composite32(pixman_op,
> ps->image, /* src */
> - NULL /* mask */,
> + mask_image, /* mask */
> po->shadow_image, /* dest */
> 0, 0, /* src_x, src_y */
> 0, 0, /* mask_x, mask_y */
We're leaking mask_image.
Kristian
> --
> 1.7.10.4
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list