diff options
| author | Erik Reider <[email protected]> | 2024-08-23 17:04:02 +0200 | 
|---|---|---|
| committer | GitHub <[email protected]> | 2024-08-23 11:04:02 -0400 | 
| commit | 230c804872c22c9c21667649277114336127872d (patch) | |
| tree | 53af4a666842cf1dd4f123a81420baa0f52a577d | |
| parent | 915159c3f8a913e6b3df091ed3fad6a476677b57 (diff) | |
Remove our buffer clipping logic (#56)
The user should use wlr_scene_subsurface_tree_set_clip instead
| -rw-r--r-- | types/scene/wlr_scene.c | 63 | 
1 files changed, 4 insertions, 59 deletions
| diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 488ab66..2f4dd45 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -1168,51 +1168,6 @@ struct wlr_scene_node *wlr_scene_node_at(struct wlr_scene_node *node,  	return NULL;  } -// Some surfaces (mostly GTK 4) decorate their windows with shadows -// which extends the node size past the actual window size. This gets -// the actual surface geometry, mostly ignoring CSD decorations -// but only if we need to. -static void clip_xdg(struct wlr_scene_node *node, -		pixman_region32_t *clip, struct wlr_box *dst_box, -		int x, int y, float scale) { -	struct wlr_scene_buffer *scene_buffer = NULL; -	switch (node->type) { -	default: -		return; -	case WLR_SCENE_NODE_BUFFER: -		scene_buffer = wlr_scene_buffer_from_node(node); -		break; -	} - -	// Don't clip if the scene buffer doesn't have any effects -	if (!scene_buffer || (scene_buffer->corner_radius == 0 && -				!scene_buffer_has_shadow(&scene_buffer->shadow_data))) { -		return; -	} - -	struct wlr_scene_surface *scene_surface = wlr_scene_surface_try_from_buffer(scene_buffer); -	struct wlr_xdg_surface *xdg_surface = NULL; -	if (scene_surface && -			(xdg_surface = wlr_xdg_surface_try_from_wlr_surface(scene_surface->surface))) { -		struct wlr_box geometry; -		wlr_xdg_surface_get_geometry(xdg_surface, &geometry); -		scale_box(&geometry, scale); - -		if (dst_box->width > geometry.width) { -			dst_box->width = geometry.width; -			dst_box->x = geometry.x + x; -		} -		if (dst_box->height > geometry.height) { -			dst_box->height = geometry.height; -			dst_box->y = geometry.y + y; -		} - -		pixman_region32_intersect_rect(clip, clip, -				dst_box->x, dst_box->y, -				dst_box->width, dst_box->height); -	} -} -  struct render_list_entry {  	struct wlr_scene_node *node;  	bool sent_dmabuf_feedback; @@ -1243,15 +1198,8 @@ static void scene_entry_render(struct render_list_entry *entry, const struct ren  	scene_node_get_size(node, &dst_box.width, &dst_box.height);  	scale_box(&dst_box, data->scale); -	// Tries to clip the node to the xdg geometry size, clipping CSD -	struct wlr_box xdg_box = dst_box; -	pixman_region32_t geometry_region; // The actual geometry region excluding CSD -	pixman_region32_init(&geometry_region); -	pixman_region32_copy(&geometry_region, &render_region); -	clip_xdg(node, &geometry_region, &xdg_box, dst_box.x, dst_box.y, data->scale); -  	// Shadow box -	struct wlr_box shadow_box = xdg_box; +	struct wlr_box shadow_box = dst_box;  	pixman_region32_t opaque;  	pixman_region32_init(&opaque); @@ -1260,9 +1208,7 @@ static void scene_entry_render(struct render_list_entry *entry, const struct ren  	pixman_region32_subtract(&opaque, &render_region, &opaque);  	transform_output_box(&dst_box, data); -	transform_output_box(&xdg_box, data);  	transform_output_damage(&render_region, data); -	transform_output_damage(&geometry_region, data);  	switch (node->type) {  	case WLR_SCENE_NODE_TREE: @@ -1312,7 +1258,7 @@ static void scene_entry_render(struct render_list_entry *entry, const struct ren  			struct fx_render_box_shadow_options shadow_options = {  				.shadow_box = shadow_box, -				.clip_box = xdg_box, +				.clip_box = dst_box,  				.clip = &render_region,  				.shadow_data = &shadow_data,  				.corner_radius = scene_buffer->corner_radius * data->scale, @@ -1326,13 +1272,13 @@ static void scene_entry_render(struct render_list_entry *entry, const struct ren  				.src_box = scene_buffer->src_box,  				.dst_box = dst_box,  				.transform = transform, -				.clip = &geometry_region, // Render with the smaller region, clipping CSD +				.clip = &render_region, // Render with the smaller region, clipping CSD  				.alpha = &scene_buffer->opacity,  				.filter_mode = scene_buffer->filter_mode,  				.blend_mode = pixman_region32_not_empty(&opaque) ?  					WLR_RENDER_BLEND_MODE_PREMULTIPLIED : WLR_RENDER_BLEND_MODE_NONE,  			}, -			.clip_box = &xdg_box, +			.clip_box = &dst_box,  			.corner_radius = scene_buffer->corner_radius * data->scale,  		}; @@ -1347,7 +1293,6 @@ static void scene_entry_render(struct render_list_entry *entry, const struct ren  	}  	pixman_region32_fini(&opaque); -	pixman_region32_fini(&geometry_region);  	pixman_region32_fini(&render_region);  } | 
