[PATCH] Support on-the-fly transparency changes in pixman renderer

Manuel Bachmann manuel.bachmann at open.eurogiciel.org
Fri Apr 4 20:31:37 PDT 2014


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;
+
 	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 */
-- 
1.7.10.4



More information about the wayland-devel mailing list