summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Reider <[email protected]>2024-02-15 09:48:31 +0100
committerGitHub <[email protected]>2024-02-15 09:48:31 +0100
commit2bd366f3372d6f94f6633e62b7f7b06fcf316943 (patch)
treec3361e15ba86b73f37d0a442da84312ce4c666af
parentd1482ad992001facc89c4bd93ee7fb6995bc134c (diff)
Add blur to tiling indicator (#252)
-rw-r--r--include/sway/desktop/fx_renderer/fx_renderer.h2
-rw-r--r--include/sway/output.h11
-rw-r--r--sway/desktop/render.c10
-rw-r--r--sway/input/seatop_move_tiling.c10
4 files changed, 25 insertions, 8 deletions
diff --git a/include/sway/desktop/fx_renderer/fx_renderer.h b/include/sway/desktop/fx_renderer/fx_renderer.h
index 924d9951..7643caaf 100644
--- a/include/sway/desktop/fx_renderer/fx_renderer.h
+++ b/include/sway/desktop/fx_renderer/fx_renderer.h
@@ -180,6 +180,8 @@ struct fx_renderer {
} shaders;
};
+struct decoration_data get_undecorated_decoration_data();
+
struct fx_renderer *fx_renderer_create(struct wlr_egl *egl, struct wlr_output *output);
void fx_renderer_fini(struct fx_renderer *renderer);
diff --git a/include/sway/output.h b/include/sway/output.h
index 3215c853..bd65237e 100644
--- a/include/sway/output.h
+++ b/include/sway/output.h
@@ -19,6 +19,12 @@ struct render_data {
struct decoration_data deco_data;
};
+struct blur_stencil_data {
+ struct fx_texture *stencil_texture;
+ const struct wlr_fbox *stencil_src_box;
+ float *stencil_matrix;
+};
+
struct sway_output_state {
list_t *workspaces;
struct sway_workspace *active_workspace;
@@ -184,6 +190,11 @@ void render_rounded_rect(struct sway_output *output,
float color[static 4], int corner_radius,
enum corner_location corner_location);
+void render_blur(bool optimized, struct sway_output *output,
+ pixman_region32_t *output_damage, const struct wlr_box *dst_box,
+ pixman_region32_t *opaque_region, struct decoration_data *deco_data,
+ struct blur_stencil_data *stencil_data);
+
void premultiply_alpha(float color[4], float opacity);
diff --git a/sway/desktop/render.c b/sway/desktop/render.c
index e1deb33b..429924c2 100644
--- a/sway/desktop/render.c
+++ b/sway/desktop/render.c
@@ -295,12 +295,6 @@ struct fx_framebuffer *get_main_buffer_blur(struct fx_renderer *renderer, struct
return current_buffer;
}
-struct blur_stencil_data {
- struct fx_texture *stencil_texture;
- const struct wlr_fbox *stencil_src_box;
- float *stencil_matrix;
-};
-
void render_blur(bool optimized, struct sway_output *output,
pixman_region32_t *output_damage, const struct wlr_box *dst_box,
pixman_region32_t *opaque_region, struct decoration_data *deco_data,
@@ -336,7 +330,7 @@ void render_blur(bool optimized, struct sway_output *output,
}
// Get a stencil of the window ignoring transparent regions
- if (deco_data->discard_transparent) {
+ if (deco_data->discard_transparent && stencil_data) {
fx_renderer_scissor(NULL);
fx_renderer_stencil_mask_init();
@@ -358,7 +352,7 @@ void render_blur(bool optimized, struct sway_output *output,
render_texture(wlr_output, &damage, &buffer->texture, NULL, dst_box, matrix, blur_deco_data);
// Finish stenciling
- if (deco_data->discard_transparent) {
+ if (deco_data->discard_transparent && stencil_data) {
fx_renderer_stencil_mask_fini();
}
diff --git a/sway/input/seatop_move_tiling.c b/sway/input/seatop_move_tiling.c
index 87e887ca..4e4db18c 100644
--- a/sway/input/seatop_move_tiling.c
+++ b/sway/input/seatop_move_tiling.c
@@ -45,6 +45,16 @@ static void handle_render(struct sway_seat *seat,
struct wlr_box box;
memcpy(&box, &e->drop_box, sizeof(struct wlr_box));
scale_box(&box, output->wlr_output->scale);
+
+ // Render blur
+ pixman_region32_t opaque_region;
+ pixman_region32_init(&opaque_region);
+ struct decoration_data deco_data = get_undecorated_decoration_data();
+ deco_data.blur = e->con->blur_enabled;
+ deco_data.corner_radius = e->con->corner_radius;
+ render_blur(false, output, damage, &box, &opaque_region, &deco_data, NULL);
+ pixman_region32_fini(&opaque_region);
+
render_rounded_rect(output, damage, &box, color,
e->con->corner_radius * output->wlr_output->scale, ALL);
}