summaryrefslogtreecommitdiff
path: root/sway/desktop/render.c
diff options
context:
space:
mode:
authorErik Reider <[email protected]>2024-04-22 23:41:51 +0200
committerGitHub <[email protected]>2024-04-22 17:41:51 -0400
commita5a69d4d4e9a8fe306e27ca46cde3a8b9d312ae3 (patch)
treed4389a72dcfaf19ff7090259efbc5cfeb2bbadaa /sway/desktop/render.c
parent4b954d5a05d986afcaaf488e744c5566a2d031ef (diff)
fix: gray background rect not being expanded by blur size (#295)
Diffstat (limited to 'sway/desktop/render.c')
-rw-r--r--sway/desktop/render.c26
1 files 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,