Browse Source

Merge pull request #11617 from groud/fix_bad_display

Fixes bad display
Rémi Verschelde 8 years ago
parent
commit
da144fed4c

+ 0 - 1
editor/animation_editor.cpp

@@ -3936,7 +3936,6 @@ AnimationKeyEditor::AnimationKeyEditor() {
 	key_editor_tab->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
 	key_editor_tab->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
 
 
 	key_editor = memnew(PropertyEditor);
 	key_editor = memnew(PropertyEditor);
-	key_editor->set_anchors_and_margins_preset(Control::PRESET_WIDE);
 	key_editor->hide_top_label();
 	key_editor->hide_top_label();
 	key_editor->set_name(TTR("Key"));
 	key_editor->set_name(TTR("Key"));
 	key_editor_tab->add_child(key_editor);
 	key_editor_tab->add_child(key_editor);

+ 0 - 1
editor/editor_help.cpp

@@ -1790,7 +1790,6 @@ EditorHelp::EditorHelp() {
 	{
 	{
 		class_desc = memnew(RichTextLabel);
 		class_desc = memnew(RichTextLabel);
 		vbc->add_child(class_desc);
 		vbc->add_child(class_desc);
-		class_desc->set_anchors_and_margins_preset(Control::PRESET_WIDE);
 		class_desc->set_v_size_flags(SIZE_EXPAND_FILL);
 		class_desc->set_v_size_flags(SIZE_EXPAND_FILL);
 		class_desc->add_color_override("selection_color", EDITOR_DEF("text_editor/highlighting/selection_color", Color(0.2, 0.2, 1)));
 		class_desc->add_color_override("selection_color", EDITOR_DEF("text_editor/highlighting/selection_color", Color(0.2, 0.2, 1)));
 		class_desc->connect("meta_clicked", this, "_class_desc_select");
 		class_desc->connect("meta_clicked", this, "_class_desc_select");

+ 0 - 1
editor/editor_log.cpp

@@ -161,7 +161,6 @@ EditorLog::EditorLog() {
 	log->set_selection_enabled(true);
 	log->set_selection_enabled(true);
 	log->set_focus_mode(FOCUS_CLICK);
 	log->set_focus_mode(FOCUS_CLICK);
 	log->set_custom_minimum_size(Size2(0, 180) * EDSCALE);
 	log->set_custom_minimum_size(Size2(0, 180) * EDSCALE);
-	log->set_anchors_and_margins_preset(Control::PRESET_WIDE);
 	log->set_v_size_flags(SIZE_EXPAND_FILL);
 	log->set_v_size_flags(SIZE_EXPAND_FILL);
 	log->set_h_size_flags(SIZE_EXPAND_FILL);
 	log->set_h_size_flags(SIZE_EXPAND_FILL);
 	vb->add_child(log);
 	vb->add_child(log);

+ 0 - 3
editor/editor_node.cpp

@@ -5083,9 +5083,6 @@ EditorNode::EditorNode() {
 	play_cc = memnew(CenterContainer);
 	play_cc = memnew(CenterContainer);
 	play_cc->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
 	play_cc->set_mouse_filter(Control::MOUSE_FILTER_IGNORE);
 	menu_hb->add_child(play_cc);
 	menu_hb->add_child(play_cc);
-	play_cc->set_anchors_and_margins_preset(Control::PRESET_WIDE);
-	play_cc->set_anchor_and_margin(MARGIN_BOTTOM, Control::ANCHOR_BEGIN, 10);
-	play_cc->set_margin(MARGIN_TOP, 5);
 
 
 	play_button_panel = memnew(PanelContainer);
 	play_button_panel = memnew(PanelContainer);
 	// play_button_panel->add_style_override("panel", gui_base->get_stylebox("PlayButtonPanel", "EditorStyles"));
 	// play_button_panel->add_style_override("panel", gui_base->get_stylebox("PlayButtonPanel", "EditorStyles"));

+ 0 - 1
editor/project_settings_editor.cpp

@@ -1504,7 +1504,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
 
 
 	Control *input_base = memnew(Control);
 	Control *input_base = memnew(Control);
 	input_base->set_name(TTR("Input Map"));
 	input_base->set_name(TTR("Input Map"));
-	input_base->set_anchors_and_margins_preset(Control::PRESET_WIDE);
 	tab_container->add_child(input_base);
 	tab_container->add_child(input_base);
 
 
 	VBoxContainer *vbc = memnew(VBoxContainer);
 	VBoxContainer *vbc = memnew(VBoxContainer);

+ 0 - 1
modules/visual_script/visual_script_editor.cpp

@@ -3268,7 +3268,6 @@ VisualScriptEditor::VisualScriptEditor() {
 	graph = memnew(GraphEdit);
 	graph = memnew(GraphEdit);
 	add_child(graph);
 	add_child(graph);
 	graph->set_anchors_and_margins_preset(Control::PRESET_WIDE);
 	graph->set_anchors_and_margins_preset(Control::PRESET_WIDE);
-	graph->set_h_size_flags(SIZE_EXPAND_FILL);
 	graph->connect("node_selected", this, "_node_selected");
 	graph->connect("node_selected", this, "_node_selected");
 	graph->connect("_begin_node_move", this, "_begin_node_move");
 	graph->connect("_begin_node_move", this, "_begin_node_move");
 	graph->connect("_end_node_move", this, "_end_node_move");
 	graph->connect("_end_node_move", this, "_end_node_move");

+ 65 - 35
scene/gui/control.cpp

@@ -1472,102 +1472,132 @@ void Control::set_anchors_preset(LayoutPreset p_preset, bool p_keep_margin) {
 }
 }
 
 
 void Control::set_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) {
 void Control::set_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) {
-	if (!is_inside_tree())
-		return;
-
-	Point2 new_pos;
+	// Calculate the size if the node is not resized
 	Size2 min_size = get_minimum_size();
 	Size2 min_size = get_minimum_size();
 	Size2 new_size = get_size();
 	Size2 new_size = get_size();
-	Size2 parent_size = get_parent_area_size();
+	if (p_resize_mode == PRESET_MODE_MINSIZE || p_resize_mode == PRESET_MODE_KEEP_HEIGHT) {
+		new_size.x = min_size.x;
+	}
+	if (p_resize_mode == PRESET_MODE_MINSIZE || p_resize_mode == PRESET_MODE_KEEP_WIDTH) {
+		new_size.y = min_size.y;
+	}
+
+	float pw = _get_parent_range(0);
+	float ph = _get_parent_range(1);
 
 
-	// Width
+	//Left
 	switch (p_preset) {
 	switch (p_preset) {
+		case PRESET_TOP_LEFT:
+		case PRESET_BOTTOM_LEFT:
+		case PRESET_CENTER_LEFT:
 		case PRESET_TOP_WIDE:
 		case PRESET_TOP_WIDE:
 		case PRESET_BOTTOM_WIDE:
 		case PRESET_BOTTOM_WIDE:
+		case PRESET_LEFT_WIDE:
 		case PRESET_HCENTER_WIDE:
 		case PRESET_HCENTER_WIDE:
 		case PRESET_WIDE:
 		case PRESET_WIDE:
-			new_size.x = parent_size.x - 2 * p_margin;
+			data.margin[0] = pw * (0.0 - data.anchor[0]) + p_margin;
 			break;
 			break;
-		default:
-			if (p_resize_mode == PRESET_MODE_MINSIZE || p_resize_mode == PRESET_MODE_KEEP_HEIGHT) {
-				new_size.x = min_size.x;
-			}
+
+		case PRESET_CENTER_TOP:
+		case PRESET_CENTER_BOTTOM:
+		case PRESET_CENTER:
+		case PRESET_VCENTER_WIDE:
+			data.margin[0] = pw * (0.5 - data.anchor[0]) - new_size.x / 2;
+			break;
+
+		case PRESET_TOP_RIGHT:
+		case PRESET_BOTTOM_RIGHT:
+		case PRESET_CENTER_RIGHT:
+		case PRESET_RIGHT_WIDE:
+			data.margin[0] = pw * (1.0 - data.anchor[0]) - new_size.x - p_margin;
 			break;
 			break;
 	}
 	}
 
 
-	// Height
+	// Top
 	switch (p_preset) {
 	switch (p_preset) {
+		case PRESET_TOP_LEFT:
+		case PRESET_TOP_RIGHT:
+		case PRESET_CENTER_TOP:
 		case PRESET_LEFT_WIDE:
 		case PRESET_LEFT_WIDE:
 		case PRESET_RIGHT_WIDE:
 		case PRESET_RIGHT_WIDE:
+		case PRESET_TOP_WIDE:
 		case PRESET_VCENTER_WIDE:
 		case PRESET_VCENTER_WIDE:
 		case PRESET_WIDE:
 		case PRESET_WIDE:
-			new_size.y = parent_size.y - 2 * p_margin;
+			data.margin[1] = ph * (0.0 - data.anchor[1]) + p_margin;
 			break;
 			break;
-		default:
-			if (p_resize_mode == PRESET_MODE_MINSIZE || p_resize_mode == PRESET_MODE_KEEP_WIDTH) {
-				new_size.y = min_size.y;
-			}
+
+		case PRESET_CENTER_LEFT:
+		case PRESET_CENTER_RIGHT:
+		case PRESET_CENTER:
+		case PRESET_HCENTER_WIDE:
+			data.margin[1] = ph * (0.5 - data.anchor[1]) - new_size.y / 2;
+			break;
+
+		case PRESET_BOTTOM_LEFT:
+		case PRESET_BOTTOM_RIGHT:
+		case PRESET_CENTER_BOTTOM:
+		case PRESET_BOTTOM_WIDE:
+			data.margin[1] = ph * (1.0 - data.anchor[1]) - new_size.y - p_margin;
 			break;
 			break;
 	}
 	}
 
 
-	// x pos
+	// Right
 	switch (p_preset) {
 	switch (p_preset) {
 		case PRESET_TOP_LEFT:
 		case PRESET_TOP_LEFT:
 		case PRESET_BOTTOM_LEFT:
 		case PRESET_BOTTOM_LEFT:
 		case PRESET_CENTER_LEFT:
 		case PRESET_CENTER_LEFT:
-		case PRESET_TOP_WIDE:
-		case PRESET_BOTTOM_WIDE:
 		case PRESET_LEFT_WIDE:
 		case PRESET_LEFT_WIDE:
-		case PRESET_HCENTER_WIDE:
-		case PRESET_WIDE:
-			new_pos.x = p_margin;
+			data.margin[2] = pw * (0.0 - data.anchor[2]) + new_size.x + p_margin;
 			break;
 			break;
 
 
 		case PRESET_CENTER_TOP:
 		case PRESET_CENTER_TOP:
 		case PRESET_CENTER_BOTTOM:
 		case PRESET_CENTER_BOTTOM:
 		case PRESET_CENTER:
 		case PRESET_CENTER:
 		case PRESET_VCENTER_WIDE:
 		case PRESET_VCENTER_WIDE:
-			new_pos.x = (parent_size.x - new_size.x) / 2.0;
+			data.margin[2] = pw * (0.5 - data.anchor[2]) + new_size.x / 2;
 			break;
 			break;
 
 
 		case PRESET_TOP_RIGHT:
 		case PRESET_TOP_RIGHT:
 		case PRESET_BOTTOM_RIGHT:
 		case PRESET_BOTTOM_RIGHT:
 		case PRESET_CENTER_RIGHT:
 		case PRESET_CENTER_RIGHT:
+		case PRESET_TOP_WIDE:
 		case PRESET_RIGHT_WIDE:
 		case PRESET_RIGHT_WIDE:
-			new_pos.x = parent_size.x - new_size.x - p_margin;
+		case PRESET_BOTTOM_WIDE:
+		case PRESET_HCENTER_WIDE:
+		case PRESET_WIDE:
+			data.margin[2] = pw * (1.0 - data.anchor[2]) - p_margin;
 			break;
 			break;
 	}
 	}
 
 
-	// y pos
+	// Bottom
 	switch (p_preset) {
 	switch (p_preset) {
 		case PRESET_TOP_LEFT:
 		case PRESET_TOP_LEFT:
 		case PRESET_TOP_RIGHT:
 		case PRESET_TOP_RIGHT:
 		case PRESET_CENTER_TOP:
 		case PRESET_CENTER_TOP:
-		case PRESET_LEFT_WIDE:
-		case PRESET_RIGHT_WIDE:
 		case PRESET_TOP_WIDE:
 		case PRESET_TOP_WIDE:
-		case PRESET_VCENTER_WIDE:
-		case PRESET_WIDE:
-			new_pos.y = p_margin;
+			data.margin[3] = ph * (0.0 - data.anchor[3]) + new_size.y + p_margin;
 			break;
 			break;
 
 
 		case PRESET_CENTER_LEFT:
 		case PRESET_CENTER_LEFT:
 		case PRESET_CENTER_RIGHT:
 		case PRESET_CENTER_RIGHT:
 		case PRESET_CENTER:
 		case PRESET_CENTER:
 		case PRESET_HCENTER_WIDE:
 		case PRESET_HCENTER_WIDE:
-			new_pos.y = (parent_size.y - new_size.y) / 2.0;
+			data.margin[3] = ph * (0.5 - data.anchor[3]) + new_size.y / 2;
 			break;
 			break;
 
 
 		case PRESET_BOTTOM_LEFT:
 		case PRESET_BOTTOM_LEFT:
 		case PRESET_BOTTOM_RIGHT:
 		case PRESET_BOTTOM_RIGHT:
 		case PRESET_CENTER_BOTTOM:
 		case PRESET_CENTER_BOTTOM:
+		case PRESET_LEFT_WIDE:
+		case PRESET_RIGHT_WIDE:
 		case PRESET_BOTTOM_WIDE:
 		case PRESET_BOTTOM_WIDE:
-			new_pos.y = parent_size.y - new_size.y - p_margin;
+		case PRESET_VCENTER_WIDE:
+		case PRESET_WIDE:
+			data.margin[3] = ph * (1.0 - data.anchor[3]) - p_margin;
 			break;
 			break;
 	}
 	}
 
 
-	set_position(new_pos);
-	set_size(new_size);
+	_size_changed();
 }
 }
 
 
 void Control::set_anchors_and_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) {
 void Control::set_anchors_and_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) {

+ 1 - 1
scene/gui/popup.cpp

@@ -265,7 +265,7 @@ void PopupPanel::set_child_rect(Control *p_child) {
 	ERR_FAIL_NULL(p_child);
 	ERR_FAIL_NULL(p_child);
 
 
 	Ref<StyleBox> p = get_stylebox("panel");
 	Ref<StyleBox> p = get_stylebox("panel");
-	p_child->set_anchors_and_margins_preset(Control::PRESET_WIDE);
+	p_child->set_anchors_preset(Control::PRESET_WIDE);
 	p_child->set_margin(MARGIN_LEFT, p->get_margin(MARGIN_LEFT));
 	p_child->set_margin(MARGIN_LEFT, p->get_margin(MARGIN_LEFT));
 	p_child->set_margin(MARGIN_RIGHT, -p->get_margin(MARGIN_RIGHT));
 	p_child->set_margin(MARGIN_RIGHT, -p->get_margin(MARGIN_RIGHT));
 	p_child->set_margin(MARGIN_TOP, p->get_margin(MARGIN_TOP));
 	p_child->set_margin(MARGIN_TOP, p->get_margin(MARGIN_TOP));