[PATCH weston 8/8] pixman-renderer: implement view scissor

Pekka Paalanen ppaalanen at gmail.com
Fri Mar 6 03:04:03 PST 2015


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

Only needed in the source-clipped case, otherwise the boundingbox is
already doing the necessary clipping.

Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
---
 src/pixman-renderer.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
index d3f1342..33cf541 100644
--- a/src/pixman-renderer.c
+++ b/src/pixman-renderer.c
@@ -558,6 +558,10 @@ draw_view_source_clipped(struct weston_view *view,
 
 	pixman_region32_init_rect(&surf_region, 0, 0,
 				  surface->width, surface->height);
+	if (view->geometry.scissor_enabled)
+		pixman_region32_intersect(&surf_region, &surf_region,
+					  &view->geometry.scissor);
+
 	pixman_region32_init(&buffer_region);
 	weston_surface_to_buffer_region(surface, &surf_region, &buffer_region);
 
@@ -604,6 +608,8 @@ draw_view(struct weston_view *ev, struct weston_output *output,
 		 * etc. are convertible to global coordinate space.
 		 * There is no need to use a source clip region.
 		 * It is possible to paint opaque region as PIXMAN_OP_SRC.
+		 * Also the boundingbox is accurate rather than an
+		 * approximation.
 		 */
 		draw_view_translated(ev, output, &repaint);
 	} else {
@@ -953,6 +959,7 @@ pixman_renderer_init(struct weston_compositor *ec)
 	ec->renderer = &renderer->base;
 	ec->capabilities |= WESTON_CAP_ROTATION_ANY;
 	ec->capabilities |= WESTON_CAP_CAPTURE_YFLIP;
+	ec->capabilities |= WESTON_CAP_VIEW_CLIP_MASK;
 
 	renderer->debug_binding =
 		weston_compositor_add_debug_binding(ec, KEY_R,
-- 
2.0.5



More information about the wayland-devel mailing list