From 08a6da05412961ddf629415a92749b02d875fa62 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Mon, 4 Oct 2021 17:25:48 -0700 Subject: feat(wm): layer shell --- sys/cmd/wm/render.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'sys/cmd/wm/render.c') diff --git a/sys/cmd/wm/render.c b/sys/cmd/wm/render.c index 3732ec5..ff4a514 100644 --- a/sys/cmd/wm/render.c +++ b/sys/cmd/wm/render.c @@ -15,7 +15,6 @@ render(struct wlr_surface *surface, int sx, int sy, void *data) { float matrix[9]; double x, y; - Client *client; struct Payload *payload; struct wlr_box box; @@ -24,7 +23,6 @@ render(struct wlr_surface *surface, int sx, int sy, void *data) enum wl_output_transform transform; payload = data; - client = payload->client; output = payload->output; texture = wlr_surface_get_texture(surface); @@ -50,6 +48,23 @@ render(struct wlr_surface *surface, int sx, int sy, void *data) wlr_presentation_surface_sampled_on_output(server.present, surface, output); } +static +void +render_layer(struct wl_list *list, struct timespec *now) +{ + Layer *layer; + wl_list_for_each(layer, list, link) { + struct Payload payload= { + .output = layer->surface->output, + .x = layer->geometry.x, + .y = layer->geometry.y, + .when = now, + }; + + wlr_surface_for_each_surface(layer->surface->surface, render, &payload); + } +} + static void render_clients(Monitor *monitor, struct timespec *now) @@ -94,7 +109,6 @@ render_clients(Monitor *monitor, struct timespec *now) struct Payload payload = { .output = output, - .client = client, .when = now, .x = client->geometry.x + client->border, @@ -131,8 +145,14 @@ render_monitor(struct wl_listener *l, void *data) wlr_renderer_begin(server.renderer, w, h); wlr_renderer_clear(server.renderer, cfg·rootcolor); + render_layer(&monitor->layer[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &now); + render_layer(&monitor->layer[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM], &now); + render_clients(monitor, &now); + render_layer(&monitor->layer[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &now); + render_layer(&monitor->layer[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &now); + wlr_output_render_software_cursors(monitor->output, nil); wlr_renderer_end(server.renderer); -- cgit v1.2.1