Browse Source

Fix child nodes still being drawn when the visible area of a control with `clip_contents` enabled is `0`

Rindbee 2 years ago
parent
commit
7129718dc5
1 changed files with 5 additions and 5 deletions
  1. 5 5
      servers/rendering/renderer_canvas_cull.cpp

+ 5 - 5
servers/rendering/renderer_canvas_cull.cpp

@@ -275,12 +275,12 @@ void RendererCanvasCull::_cull_canvas_item(Item *p_canvas_item, const Transform2
 	if (ci->clip) {
 	if (ci->clip) {
 		if (p_canvas_clip != nullptr) {
 		if (p_canvas_clip != nullptr) {
 			ci->final_clip_rect = p_canvas_clip->final_clip_rect.intersection(global_rect);
 			ci->final_clip_rect = p_canvas_clip->final_clip_rect.intersection(global_rect);
-			if (ci->final_clip_rect == Rect2()) {
-				// Clip rects do not intersect, so don't draw this item.
-				return;
-			}
 		} else {
 		} else {
-			ci->final_clip_rect = global_rect;
+			ci->final_clip_rect = p_clip_rect.intersection(global_rect);
+		}
+		if (ci->final_clip_rect.size.width < 0.5 || ci->final_clip_rect.size.height < 0.5) {
+			// The clip rect area is 0, so don't draw the item.
+			return;
 		}
 		}
 		ci->final_clip_rect.position = ci->final_clip_rect.position.round();
 		ci->final_clip_rect.position = ci->final_clip_rect.position.round();
 		ci->final_clip_rect.size = ci->final_clip_rect.size.round();
 		ci->final_clip_rect.size = ci->final_clip_rect.size.round();