Browse Source

Merge pull request #63248 from Rindbee/reselect-the-timing-of-first_draw

Rémi Verschelde 3 years ago
parent
commit
9a81b129f6
2 changed files with 4 additions and 9 deletions
  1. 4 8
      scene/main/canvas_item.cpp
  2. 0 1
      scene/main/canvas_item.h

+ 4 - 8
scene/main/canvas_item.cpp

@@ -64,9 +64,6 @@ void CanvasItem::_propagate_visibility_changed(bool p_parent_visible_in_tree) {
 	if (!visible) {
 		return;
 	}
-	if (p_parent_visible_in_tree && first_draw) { // Avoid propagating it twice.
-		first_draw = false;
-	}
 
 	_handle_visibility_change(p_parent_visible_in_tree);
 }
@@ -133,10 +130,6 @@ void CanvasItem::_update_callback() {
 	RenderingServer::get_singleton()->canvas_item_clear(get_canvas_item());
 	//todo updating = true - only allow drawing here
 	if (is_visible_in_tree()) {
-		if (first_draw) {
-			notification(NOTIFICATION_VISIBILITY_CHANGED);
-			first_draw = false;
-		}
 		drawing = true;
 		current_item_drawn = this;
 		notification(NOTIFICATION_DRAW);
@@ -268,7 +261,6 @@ void CanvasItem::_notification(int p_what) {
 	switch (p_what) {
 		case NOTIFICATION_ENTER_TREE: {
 			ERR_FAIL_COND(!is_inside_tree());
-			first_draw = true;
 
 			Node *parent = get_parent();
 			if (parent) {
@@ -307,6 +299,10 @@ void CanvasItem::_notification(int p_what) {
 				}
 			}
 
+			RenderingServer::get_singleton()->canvas_item_set_visible(canvas_item, is_visible_in_tree()); // The visibility of the parent may change.
+			if (is_visible_in_tree()) {
+				notification(NOTIFICATION_VISIBILITY_CHANGED); // Considered invisible until entered.
+			}
 			_enter_canvas();
 
 			_update_texture_filter_changed(false);

+ 0 - 1
scene/main/canvas_item.h

@@ -83,7 +83,6 @@ private:
 	int light_mask = 1;
 
 	Window *window = nullptr;
-	bool first_draw = false;
 	bool visible = true;
 	bool parent_visible_in_tree = false;
 	bool clip_children = false;