aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/wm/render.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cmd/wm/render.c')
-rw-r--r--sys/cmd/wm/render.c26
1 files changed, 23 insertions, 3 deletions
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);
@@ -52,6 +50,23 @@ render(struct wlr_surface *surface, int sx, int sy, void *data)
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)
{
double x, y;
@@ -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);