From 4f60fd9394824b69b908617babce34057cd02b10 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Tue, 10 Jan 2023 16:05:41 -0600 Subject: [PATCH] clients: Add opaque region setting to simple-damage There aren't a lot of great opaque region tests, and this one is simple to extend. Signed-off-by: Derek Foreman --- clients/simple-damage.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/clients/simple-damage.c b/clients/simple-damage.c index 6b099bd6..7471117d 100644 --- a/clients/simple-damage.c +++ b/clients/simple-damage.c @@ -504,6 +504,20 @@ window_get_transformed_ball(struct window *window, float *bx, float *by) static const struct wl_callback_listener frame_listener; +static void +set_opaque_region(struct window *window) +{ + struct wl_region *region; + + region = wl_compositor_create_region(window->display->compositor); + wl_region_add(region, 0, 0, window->width, window->height); + wl_region_subtract(region, window->border, window->border, + window->width - 2 * window->border, + window->height - 2 * window->border); + wl_surface_set_opaque_region(window->surface, region); + wl_region_destroy(region); +} + static void redraw(void *data, struct wl_callback *callback, uint32_t time) { @@ -691,6 +705,8 @@ redraw(void *data, struct wl_callback *callback, uint32_t time) if (callback) wl_callback_destroy(callback); + set_opaque_region(window); + window->callback = wl_surface_frame(window->surface); wl_callback_add_listener(window->callback, &frame_listener, window); wl_surface_commit(window->surface);