Browse Source

Fix the bounds of varying popup in visual shader editor

Yuri Rubinsky 2 years ago
parent
commit
359d13cddc

+ 7 - 15
editor/plugins/visual_shader_editor_plugin.cpp

@@ -3623,12 +3623,6 @@ void VisualShaderEditor::_show_members_dialog(bool at_mouse_pos, VisualShaderNod
 	node_filter->select_all();
 	node_filter->select_all();
 }
 }
 
 
-void VisualShaderEditor::_show_varying_menu() {
-	varying_options->set_item_disabled(int(VaryingMenuOptions::REMOVE), visual_shader->get_varyings_count() == 0);
-	varying_options->set_position(graph->get_screen_position() + varying_button->get_position() + Size2(0, varying_button->get_size().height));
-	varying_options->popup();
-}
-
 void VisualShaderEditor::_varying_menu_id_pressed(int p_idx) {
 void VisualShaderEditor::_varying_menu_id_pressed(int p_idx) {
 	switch (VaryingMenuOptions(p_idx)) {
 	switch (VaryingMenuOptions(p_idx)) {
 		case VaryingMenuOptions::ADD: {
 		case VaryingMenuOptions::ADD: {
@@ -4334,7 +4328,7 @@ void VisualShaderEditor::_update_varying_tree() {
 		}
 		}
 	}
 	}
 
 
-	varying_options->set_item_disabled(int(VaryingMenuOptions::REMOVE), count == 0);
+	varying_button->get_popup()->set_item_disabled(int(VaryingMenuOptions::REMOVE), count == 0);
 }
 }
 
 
 void VisualShaderEditor::_varying_create() {
 void VisualShaderEditor::_varying_create() {
@@ -4809,17 +4803,15 @@ VisualShaderEditor::VisualShaderEditor() {
 	graph->get_zoom_hbox()->move_child(add_node, 0);
 	graph->get_zoom_hbox()->move_child(add_node, 0);
 	add_node->connect("pressed", callable_mp(this, &VisualShaderEditor::_show_members_dialog).bind(false, VisualShaderNode::PORT_TYPE_MAX, VisualShaderNode::PORT_TYPE_MAX));
 	add_node->connect("pressed", callable_mp(this, &VisualShaderEditor::_show_members_dialog).bind(false, VisualShaderNode::PORT_TYPE_MAX, VisualShaderNode::PORT_TYPE_MAX));
 
 
-	varying_button = memnew(Button);
-	varying_button->set_flat(true);
+	varying_button = memnew(MenuButton);
 	varying_button->set_text(TTR("Manage Varyings"));
 	varying_button->set_text(TTR("Manage Varyings"));
+	varying_button->set_switch_on_hover(true);
 	graph->get_zoom_hbox()->add_child(varying_button);
 	graph->get_zoom_hbox()->add_child(varying_button);
-	varying_button->connect("pressed", callable_mp(this, &VisualShaderEditor::_show_varying_menu));
 
 
-	varying_options = memnew(PopupMenu);
-	add_child(varying_options);
-	varying_options->add_item(TTR("Add Varying"), int(VaryingMenuOptions::ADD));
-	varying_options->add_item(TTR("Remove Varying"), int(VaryingMenuOptions::REMOVE));
-	varying_options->connect("id_pressed", callable_mp(this, &VisualShaderEditor::_varying_menu_id_pressed));
+	PopupMenu *varying_menu = varying_button->get_popup();
+	varying_menu->add_item(TTR("Add Varying"), int(VaryingMenuOptions::ADD));
+	varying_menu->add_item(TTR("Remove Varying"), int(VaryingMenuOptions::REMOVE));
+	varying_menu->connect("id_pressed", callable_mp(this, &VisualShaderEditor::_varying_menu_id_pressed));
 
 
 	preview_shader = memnew(Button);
 	preview_shader = memnew(Button);
 	preview_shader->set_flat(true);
 	preview_shader->set_flat(true);

+ 1 - 3
editor/plugins/visual_shader_editor_plugin.h

@@ -165,8 +165,7 @@ class VisualShaderEditor : public VBoxContainer {
 	Ref<VisualShader> visual_shader;
 	Ref<VisualShader> visual_shader;
 	GraphEdit *graph = nullptr;
 	GraphEdit *graph = nullptr;
 	Button *add_node = nullptr;
 	Button *add_node = nullptr;
-	Button *varying_button = nullptr;
-	PopupMenu *varying_options = nullptr;
+	MenuButton *varying_button = nullptr;
 	Button *preview_shader = nullptr;
 	Button *preview_shader = nullptr;
 
 
 	OptionButton *edit_type = nullptr;
 	OptionButton *edit_type = nullptr;
@@ -283,7 +282,6 @@ class VisualShaderEditor : public VBoxContainer {
 	void _tools_menu_option(int p_idx);
 	void _tools_menu_option(int p_idx);
 	void _show_members_dialog(bool at_mouse_pos, VisualShaderNode::PortType p_input_port_type = VisualShaderNode::PORT_TYPE_MAX, VisualShaderNode::PortType p_output_port_type = VisualShaderNode::PORT_TYPE_MAX);
 	void _show_members_dialog(bool at_mouse_pos, VisualShaderNode::PortType p_input_port_type = VisualShaderNode::PORT_TYPE_MAX, VisualShaderNode::PortType p_output_port_type = VisualShaderNode::PORT_TYPE_MAX);
 
 
-	void _show_varying_menu();
 	void _varying_menu_id_pressed(int p_idx);
 	void _varying_menu_id_pressed(int p_idx);
 	void _show_add_varying_dialog();
 	void _show_add_varying_dialog();
 	void _show_remove_varying_dialog();
 	void _show_remove_varying_dialog();