Skip to content

Commit

Permalink
tree/view: Do not clip to geometry if using CSD
Browse files Browse the repository at this point in the history
If a floating window is using CSD, the geometry should not be used to
define the clipping region. Otherwise drop shadows and such may be
clipped excessively.
  • Loading branch information
thal committed Mar 10, 2024
1 parent 2e95116 commit 21073a1
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions sway/tree/view.c
Expand Up @@ -926,12 +926,16 @@ void view_update_size(struct sway_view *view) {

void view_center_and_clip_surface(struct sway_view *view) {
struct sway_container *con = view->container;
struct wlr_box *clip = NULL;

if (container_is_floating(con)) {
// We always center the current coordinates rather than the next, as the
// geometry immediately affects the currently active rendering.
int x = (int) fmax(0, (con->current.content_width - view->geometry.width) / 2);
int y = (int) fmax(0, (con->current.content_height - view->geometry.height) / 2);
if (!view->using_csd) {
clip = &con->view->geometry;
}

wlr_scene_node_set_position(&view->content_tree->node, x, y);
} else {
Expand All @@ -940,12 +944,7 @@ void view_center_and_clip_surface(struct sway_view *view) {

// only make sure to clip the content if there is content to clip
if (!wl_list_empty(&con->view->content_tree->children)) {
wlr_scene_subsurface_tree_set_clip(&con->view->content_tree->node, &(struct wlr_box){
.x = con->view->geometry.x,
.y = con->view->geometry.y,
.width = con->current.content_width,
.height = con->current.content_height,
});
wlr_scene_subsurface_tree_set_clip(&con->view->content_tree->node, clip);
}
}

Expand Down

0 comments on commit 21073a1

Please sign in to comment.