Fix the bounds of varying popup in visual shader editor

This commit is contained in:
Yuri Rubinsky 2022-11-16 22:05:09 +03:00
parent 2846ea1ffa
commit 359d13cddc
2 changed files with 8 additions and 18 deletions

View file

@ -3623,12 +3623,6 @@ void VisualShaderEditor::_show_members_dialog(bool at_mouse_pos, VisualShaderNod
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) {
switch (VaryingMenuOptions(p_idx)) {
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() {
@ -4809,17 +4803,15 @@ VisualShaderEditor::VisualShaderEditor() {
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));
varying_button = memnew(Button);
varying_button->set_flat(true);
varying_button = memnew(MenuButton);
varying_button->set_text(TTR("Manage Varyings"));
varying_button->set_switch_on_hover(true);
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->set_flat(true);

View file

@ -165,8 +165,7 @@ class VisualShaderEditor : public VBoxContainer {
Ref<VisualShader> visual_shader;
GraphEdit *graph = nullptr;
Button *add_node = nullptr;
Button *varying_button = nullptr;
PopupMenu *varying_options = nullptr;
MenuButton *varying_button = nullptr;
Button *preview_shader = nullptr;
OptionButton *edit_type = nullptr;
@ -283,7 +282,6 @@ class VisualShaderEditor : public VBoxContainer {
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_varying_menu();
void _varying_menu_id_pressed(int p_idx);
void _show_add_varying_dialog();
void _show_remove_varying_dialog();