diff options
Diffstat (limited to 'sway')
-rw-r--r-- | sway/desktop/render.c | 10 | ||||
-rw-r--r-- | sway/input/seatop_move_tiling.c | 10 |
2 files changed, 12 insertions, 8 deletions
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); } |