From 1c5c60d9280eb0b13d9884366bdeaf3748b04308 Mon Sep 17 00:00:00 2001 From: Erik Reider <35975961+ErikReider@users.noreply.github.com> Date: Thu, 28 Dec 2023 11:10:05 +0100 Subject: [PATCH] Blur damage compensation fixes (#259) * Increased blur size to match what WayFire uses * Fix damage compensation not being scaled --- sway/config.c | 2 +- sway/tree/workspace.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/sway/config.c b/sway/config.c index a0168ad0..db395475 100644 --- a/sway/config.c +++ b/sway/config.c @@ -1098,7 +1098,7 @@ void translate_keysyms(struct input_config *input_config) { } int config_get_blur_size() { - return pow(2, config->blur_params.num_passes) * config->blur_params.radius; + return pow(2, config->blur_params.num_passes + 1) * config->blur_params.radius; } bool config_should_parameters_blur() { diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c index 7e7146dd..b2305341 100644 --- a/sway/tree/workspace.c +++ b/sway/tree/workspace.c @@ -708,10 +708,15 @@ static void find_blurred_region_iterator(struct sway_container *con, void *data) pixman_region32_t *blur_region = region_data->blur_region; if (con->blur_enabled && !view->surface->opaque) { + struct wlr_box region = { + .x = floor(con->current.x) - ws->output->lx, + .y = floor(con->current.y) - ws->output->ly, + .width = con->current.width, + .height = con->current.height, + }; + scale_box(®ion, ws->output->wlr_output->scale); pixman_region32_union_rect(blur_region, blur_region, - floor(con->current.x) - ws->output->lx, - floor(con->current.y) - ws->output->ly, - con->current.width, con->current.height); + region.x, region.y, region.width, region.height); } } @@ -732,9 +737,10 @@ bool workspace_get_blur_info(struct sway_workspace *ws, pixman_region32_t *blur_ wl_list_for_each(lsurface, &sway_output->layers[i], link) { if (lsurface->has_blur && !lsurface->layer_surface->surface->opaque && lsurface->layer != ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND) { - struct wlr_box *geo = &lsurface->geo; + struct wlr_box geo = lsurface->geo; + scale_box(&geo, sway_output->wlr_output->scale); pixman_region32_union_rect(blur_region, blur_region, - geo->x, geo->y, geo->width, geo->height); + geo.x, geo.y, geo.width, geo.height); } } }