Simplified shadow logic

This commit is contained in:
Erik Reider 2023-04-22 13:13:02 +02:00
parent 1e551b462c
commit e5a79fcff2

View file

@ -453,29 +453,19 @@ static void render_surface_iterator(struct sway_output *output,
// render shadow (view->surface == surface excludes shadow on subsurfaces) // render shadow (view->surface == surface excludes shadow on subsurfaces)
if (deco_data.shadow && should_parameters_shadow() && !is_subsurface) { if (deco_data.shadow && should_parameters_shadow() && !is_subsurface) {
enum sway_container_border border = B_NONE;
int corner_radius = deco_data.corner_radius; int corner_radius = deco_data.corner_radius;
struct wlr_box box; if (view) {
if (data->is_toplevel_surface) {
memcpy(&box, &dst_box, sizeof(struct wlr_box));
} else if (view) {
struct sway_container *con = view->container; struct sway_container *con = view->container;
struct sway_container_state *state = &con->current; struct sway_container_state *state = &con->current;
border = view->container->current.border; // Only draw shadows on CSD windows if shadows_on_csd is enabled
corner_radius = (con->corner_radius + state->border_thickness) * wlr_output->scale; if (con->current.border == B_CSD && !config->shadows_on_csd_enabled) {
return;
}
box.x = floor(state->x); corner_radius = (con->corner_radius + state->border_thickness) * wlr_output->scale;
box.y = floor(state->y);
box.width = state->width;
box.height = state->height;
} }
// Only draw shadows on CSD windows if shadows_on_csd is enabled render_box_shadow(output, output_damage, &dst_box, config->shadow_color,
if (border == B_CSD && !config->shadows_on_csd_enabled) {
return;
}
scale_box(&box, wlr_output->scale);
render_box_shadow(output, output_damage, &box, config->shadow_color,
config->shadow_blur_sigma, corner_radius); config->shadow_blur_sigma, corner_radius);
} }
} }
@ -804,15 +794,8 @@ static void render_saved_view(struct sway_view *view, struct sway_output *output
if (deco_data.shadow && should_parameters_shadow() if (deco_data.shadow && should_parameters_shadow()
// Only draw shadows on CSD windows if shadows_on_csd is enabled // Only draw shadows on CSD windows if shadows_on_csd is enabled
&& !(con->current.border == B_CSD && !config->shadows_on_csd_enabled)) { && !(con->current.border == B_CSD && !config->shadows_on_csd_enabled)) {
struct wlr_box box = {
.x = floor(state.x),
.y = floor(state.y),
.width = state.width,
.height = state.height,
};
int corner_radius = (con->corner_radius + state.border_thickness) * wlr_output->scale; int corner_radius = (con->corner_radius + state.border_thickness) * wlr_output->scale;
scale_box(&box, wlr_output->scale); render_box_shadow(output, damage, &dst_box, config->shadow_color,
render_box_shadow(output, damage, &box, config->shadow_color,
config->shadow_blur_sigma, corner_radius); config->shadow_blur_sigma, corner_radius);
} }
} }