From a5a69d4d4e9a8fe306e27ca46cde3a8b9d312ae3 Mon Sep 17 00:00:00 2001 From: Erik Reider <35975961+ErikReider@users.noreply.github.com> Date: Mon, 22 Apr 2024 23:41:51 +0200 Subject: [PATCH] fix: gray background rect not being expanded by blur size (#295) --- sway/desktop/render.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/sway/desktop/render.c b/sway/desktop/render.c index 65bf2062..30f1c541 100644 --- a/sway/desktop/render.c +++ b/sway/desktop/render.c @@ -1592,9 +1592,6 @@ void output_render(struct fx_render_context *ctx) { struct sway_output *output = ctx->output; pixman_region32_t *damage = ctx->output_damage; - pixman_region32_t transformed_damage; - pixman_region32_init(&transformed_damage); - struct fx_effect_framebuffers *effect_fbos = ctx->pass->fx_effect_framebuffers; struct sway_workspace *workspace = output->current.active_workspace; @@ -1609,7 +1606,7 @@ void output_render(struct fx_render_context *ctx) { if (!pixman_region32_not_empty(damage)) { // Output isn't damaged but needs buffer swap - goto renderer_end; + return; } if (debug.damage == DAMAGE_HIGHLIGHT) { @@ -1620,6 +1617,9 @@ void output_render(struct fx_render_context *ctx) { }, }); } + + pixman_region32_t transformed_damage; + pixman_region32_init(&transformed_damage); pixman_region32_copy(&transformed_damage, damage); transform_output_damage(&transformed_damage, wlr_output); @@ -1715,17 +1715,9 @@ void output_render(struct fx_render_context *ctx) { // copy the surrounding content where the blur would display artifacts // and draw it above the artifacts - // ensure that the damage isn't expanding past the output's size - int32_t damage_width = damage->extents.x2 - damage->extents.x1; - int32_t damage_height = damage->extents.y2 - damage->extents.y1; - if (damage_width > output_width || damage_height > output_height) { - pixman_region32_intersect_rect(damage, damage, - 0, 0, output_width, output_height); - } else { - // Expand the original damage to compensate for surrounding - // blurred views to avoid sharp edges between damage regions - wlr_region_expand(damage, damage, config_get_blur_size()); - } + // Expand the original damage to compensate for surrounding + // blurred views to avoid sharp edges between damage regions + wlr_region_expand(damage, damage, config_get_blur_size()); pixman_region32_t extended_damage; pixman_region32_init(&extended_damage); @@ -1743,6 +1735,10 @@ void output_render(struct fx_render_context *ctx) { pixman_region32_union(damage, damage, &extended_damage); pixman_region32_fini(&extended_damage); + // Copy the new extended damage into the transformed damage + pixman_region32_copy(&transformed_damage, damage); + transform_output_damage(&transformed_damage, wlr_output); + // Capture the padding pixels before blur for later use fx_renderer_read_to_buffer(ctx->pass, &effect_fbos->blur_padding_region, effect_fbos->blur_saved_pixels_buffer,