Bladeren bron

Updates containers minimum size when some constants are modified

groud 6 jaren geleden
bovenliggende
commit
a1f955a1d3

+ 4 - 0
scene/gui/box_container.cpp

@@ -255,6 +255,10 @@ void BoxContainer::_notification(int p_what) {
 
 			_resort();
 		} break;
+		case NOTIFICATION_THEME_CHANGED: {
+
+			minimum_size_changed();
+		} break;
 	}
 }
 

+ 83 - 76
scene/gui/graph_node.cpp

@@ -192,97 +192,104 @@ bool GraphNode::has_point(const Point2 &p_point) const {
 
 void GraphNode::_notification(int p_what) {
 
-	if (p_what == NOTIFICATION_DRAW) {
+	switch (p_what) {
+		case NOTIFICATION_DRAW: {
 
-		Ref<StyleBox> sb;
+			Ref<StyleBox> sb;
 
-		if (comment) {
-			sb = get_stylebox(selected ? "commentfocus" : "comment");
+			if (comment) {
+				sb = get_stylebox(selected ? "commentfocus" : "comment");
 
-		} else {
+			} else {
 
-			sb = get_stylebox(selected ? "selectedframe" : "frame");
-		}
+				sb = get_stylebox(selected ? "selectedframe" : "frame");
+			}
 
-		//sb=sb->duplicate();
-		//sb->call("set_modulate",modulate);
-		Ref<Texture> port = get_icon("port");
-		Ref<Texture> close = get_icon("close");
-		Ref<Texture> resizer = get_icon("resizer");
-		int close_offset = get_constant("close_offset");
-		int close_h_offset = get_constant("close_h_offset");
-		Color close_color = get_color("close_color");
-		Ref<Font> title_font = get_font("title_font");
-		int title_offset = get_constant("title_offset");
-		int title_h_offset = get_constant("title_h_offset");
-		Color title_color = get_color("title_color");
-		Point2i icofs = -port->get_size() * 0.5;
-		int edgeofs = get_constant("port_offset");
-		icofs.y += sb->get_margin(MARGIN_TOP);
-
-		draw_style_box(sb, Rect2(Point2(), get_size()));
-
-		switch (overlay) {
-			case OVERLAY_DISABLED: {
-
-			} break;
-			case OVERLAY_BREAKPOINT: {
-
-				draw_style_box(get_stylebox("breakpoint"), Rect2(Point2(), get_size()));
-			} break;
-			case OVERLAY_POSITION: {
-				draw_style_box(get_stylebox("position"), Rect2(Point2(), get_size()));
-
-			} break;
-		}
+			//sb=sb->duplicate();
+			//sb->call("set_modulate",modulate);
+			Ref<Texture> port = get_icon("port");
+			Ref<Texture> close = get_icon("close");
+			Ref<Texture> resizer = get_icon("resizer");
+			int close_offset = get_constant("close_offset");
+			int close_h_offset = get_constant("close_h_offset");
+			Color close_color = get_color("close_color");
+			Ref<Font> title_font = get_font("title_font");
+			int title_offset = get_constant("title_offset");
+			int title_h_offset = get_constant("title_h_offset");
+			Color title_color = get_color("title_color");
+			Point2i icofs = -port->get_size() * 0.5;
+			int edgeofs = get_constant("port_offset");
+			icofs.y += sb->get_margin(MARGIN_TOP);
+
+			draw_style_box(sb, Rect2(Point2(), get_size()));
+
+			switch (overlay) {
+				case OVERLAY_DISABLED: {
+
+				} break;
+				case OVERLAY_BREAKPOINT: {
+
+					draw_style_box(get_stylebox("breakpoint"), Rect2(Point2(), get_size()));
+				} break;
+				case OVERLAY_POSITION: {
+					draw_style_box(get_stylebox("position"), Rect2(Point2(), get_size()));
+
+				} break;
+			}
 
-		int w = get_size().width - sb->get_minimum_size().x;
+			int w = get_size().width - sb->get_minimum_size().x;
 
-		if (show_close)
-			w -= close->get_width();
+			if (show_close)
+				w -= close->get_width();
 
-		draw_string(title_font, Point2(sb->get_margin(MARGIN_LEFT) + title_h_offset, -title_font->get_height() + title_font->get_ascent() + title_offset), title, title_color, w);
-		if (show_close) {
-			Vector2 cpos = Point2(w + sb->get_margin(MARGIN_LEFT) + close_h_offset, -close->get_height() + close_offset);
-			draw_texture(close, cpos, close_color);
-			close_rect.position = cpos;
-			close_rect.size = close->get_size();
-		} else {
-			close_rect = Rect2();
-		}
+			draw_string(title_font, Point2(sb->get_margin(MARGIN_LEFT) + title_h_offset, -title_font->get_height() + title_font->get_ascent() + title_offset), title, title_color, w);
+			if (show_close) {
+				Vector2 cpos = Point2(w + sb->get_margin(MARGIN_LEFT) + close_h_offset, -close->get_height() + close_offset);
+				draw_texture(close, cpos, close_color);
+				close_rect.position = cpos;
+				close_rect.size = close->get_size();
+			} else {
+				close_rect = Rect2();
+			}
 
-		for (Map<int, Slot>::Element *E = slot_info.front(); E; E = E->next()) {
-
-			if (E->key() < 0 || E->key() >= cache_y.size())
-				continue;
-			if (!slot_info.has(E->key()))
-				continue;
-			const Slot &s = slot_info[E->key()];
-			//left
-			if (s.enable_left) {
-				Ref<Texture> p = port;
-				if (s.custom_slot_left.is_valid()) {
-					p = s.custom_slot_left;
+			for (Map<int, Slot>::Element *E = slot_info.front(); E; E = E->next()) {
+
+				if (E->key() < 0 || E->key() >= cache_y.size())
+					continue;
+				if (!slot_info.has(E->key()))
+					continue;
+				const Slot &s = slot_info[E->key()];
+				//left
+				if (s.enable_left) {
+					Ref<Texture> p = port;
+					if (s.custom_slot_left.is_valid()) {
+						p = s.custom_slot_left;
+					}
+					p->draw(get_canvas_item(), icofs + Point2(edgeofs, cache_y[E->key()]), s.color_left);
 				}
-				p->draw(get_canvas_item(), icofs + Point2(edgeofs, cache_y[E->key()]), s.color_left);
-			}
-			if (s.enable_right) {
-				Ref<Texture> p = port;
-				if (s.custom_slot_right.is_valid()) {
-					p = s.custom_slot_right;
+				if (s.enable_right) {
+					Ref<Texture> p = port;
+					if (s.custom_slot_right.is_valid()) {
+						p = s.custom_slot_right;
+					}
+					p->draw(get_canvas_item(), icofs + Point2(get_size().x - edgeofs, cache_y[E->key()]), s.color_right);
 				}
-				p->draw(get_canvas_item(), icofs + Point2(get_size().x - edgeofs, cache_y[E->key()]), s.color_right);
 			}
-		}
 
-		if (resizable) {
-			draw_texture(resizer, get_size() - resizer->get_size());
-		}
-	}
+			if (resizable) {
+				draw_texture(resizer, get_size() - resizer->get_size());
+			}
+		} break;
+
+		case NOTIFICATION_SORT_CHILDREN: {
+
+			_resort();
+		} break;
 
-	if (p_what == NOTIFICATION_SORT_CHILDREN) {
+		case NOTIFICATION_THEME_CHANGED: {
 
-		_resort();
+			minimum_size_changed();
+		} break;
 	}
 }
 

+ 4 - 0
scene/gui/grid_container.cpp

@@ -164,6 +164,10 @@ void GridContainer::_notification(int p_what) {
 			}
 
 		} break;
+		case NOTIFICATION_THEME_CHANGED: {
+
+			minimum_size_changed();
+		} break;
 	}
 }
 

+ 22 - 16
scene/gui/margin_container.cpp

@@ -64,27 +64,33 @@ Size2 MarginContainer::get_minimum_size() const {
 
 void MarginContainer::_notification(int p_what) {
 
-	if (p_what == NOTIFICATION_SORT_CHILDREN) {
+	switch (p_what) {
+		case NOTIFICATION_SORT_CHILDREN: {
 
-		int margin_left = get_constant("margin_left");
-		int margin_top = get_constant("margin_top");
-		int margin_right = get_constant("margin_right");
-		int margin_bottom = get_constant("margin_bottom");
+			int margin_left = get_constant("margin_left");
+			int margin_top = get_constant("margin_top");
+			int margin_right = get_constant("margin_right");
+			int margin_bottom = get_constant("margin_bottom");
 
-		Size2 s = get_size();
+			Size2 s = get_size();
 
-		for (int i = 0; i < get_child_count(); i++) {
+			for (int i = 0; i < get_child_count(); i++) {
 
-			Control *c = Object::cast_to<Control>(get_child(i));
-			if (!c)
-				continue;
-			if (c->is_set_as_toplevel())
-				continue;
+				Control *c = Object::cast_to<Control>(get_child(i));
+				if (!c)
+					continue;
+				if (c->is_set_as_toplevel())
+					continue;
 
-			int w = s.width - margin_left - margin_right;
-			int h = s.height - margin_top - margin_bottom;
-			fit_child_in_rect(c, Rect2(margin_left, margin_top, w, h));
-		}
+				int w = s.width - margin_left - margin_right;
+				int h = s.height - margin_top - margin_bottom;
+				fit_child_in_rect(c, Rect2(margin_left, margin_top, w, h));
+			}
+		} break;
+		case NOTIFICATION_THEME_CHANGED: {
+
+			minimum_size_changed();
+		} break;
 	}
 }
 

+ 4 - 0
scene/gui/split_container.cpp

@@ -193,6 +193,10 @@ void SplitContainer::_notification(int p_what) {
 					draw_texture(tex, Point2i(middle_sep + (sep - tex->get_width()) / 2, (size.y - tex->get_height()) / 2));
 			}
 		} break;
+		case NOTIFICATION_THEME_CHANGED: {
+
+			minimum_size_changed();
+		} break;
 	}
 }
 

+ 1 - 0
scene/gui/tab_container.cpp

@@ -338,6 +338,7 @@ void TabContainer::_notification(int p_what) {
 			}
 		} break;
 		case NOTIFICATION_THEME_CHANGED: {
+			minimum_size_changed();
 			call_deferred("_on_theme_changed"); //wait until all changed theme
 		} break;
 	}