fix: gray background rect not being expanded by blur size (#295)
This commit is contained in:
parent
4b954d5a05
commit
a5a69d4d4e
|
@ -1592,9 +1592,6 @@ void output_render(struct fx_render_context *ctx) {
|
||||||
struct sway_output *output = ctx->output;
|
struct sway_output *output = ctx->output;
|
||||||
pixman_region32_t *damage = ctx->output_damage;
|
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 fx_effect_framebuffers *effect_fbos = ctx->pass->fx_effect_framebuffers;
|
||||||
|
|
||||||
struct sway_workspace *workspace = output->current.active_workspace;
|
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)) {
|
if (!pixman_region32_not_empty(damage)) {
|
||||||
// Output isn't damaged but needs buffer swap
|
// Output isn't damaged but needs buffer swap
|
||||||
goto renderer_end;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug.damage == DAMAGE_HIGHLIGHT) {
|
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);
|
pixman_region32_copy(&transformed_damage, damage);
|
||||||
transform_output_damage(&transformed_damage, wlr_output);
|
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
|
// copy the surrounding content where the blur would display artifacts
|
||||||
// and draw it above the artifacts
|
// and draw it above the artifacts
|
||||||
|
|
||||||
// ensure that the damage isn't expanding past the output's size
|
// Expand the original damage to compensate for surrounding
|
||||||
int32_t damage_width = damage->extents.x2 - damage->extents.x1;
|
// blurred views to avoid sharp edges between damage regions
|
||||||
int32_t damage_height = damage->extents.y2 - damage->extents.y1;
|
wlr_region_expand(damage, damage, config_get_blur_size());
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
pixman_region32_t extended_damage;
|
pixman_region32_t extended_damage;
|
||||||
pixman_region32_init(&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_union(damage, damage, &extended_damage);
|
||||||
pixman_region32_fini(&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
|
// Capture the padding pixels before blur for later use
|
||||||
fx_renderer_read_to_buffer(ctx->pass, &effect_fbos->blur_padding_region,
|
fx_renderer_read_to_buffer(ctx->pass, &effect_fbos->blur_padding_region,
|
||||||
effect_fbos->blur_saved_pixels_buffer,
|
effect_fbos->blur_saved_pixels_buffer,
|
||||||
|
|
Loading…
Reference in a new issue