You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Fix bad popups offset in editor with single window off
Co-authored-by: Gil Arasa Verge <gilarasaverge@gmail.com> Co-authored-by: Tomasz Chabora <kobewi4e@gmail.com>
This commit is contained in:
@@ -2078,6 +2078,7 @@ void VisualShaderEditor::_comment_desc_popup_show(const Point2 &p_position, int
|
||||
}
|
||||
comment_desc_change_edit->set_text(node->get_description());
|
||||
comment_desc_change_popup->set_meta("id", p_node_id);
|
||||
comment_desc_change_popup->reset_size();
|
||||
comment_desc_change_popup->popup();
|
||||
comment_desc_change_popup->set_position(p_position);
|
||||
}
|
||||
@@ -3165,7 +3166,7 @@ void VisualShaderEditor::_graph_gui_input(const Ref<InputEvent> &p_event) {
|
||||
}
|
||||
|
||||
menu_point = graph->get_local_mouse_position();
|
||||
Point2 gpos = Input::get_singleton()->get_mouse_position();
|
||||
Point2 gpos = get_screen_position() + get_local_mouse_position();
|
||||
popup_menu->set_position(gpos);
|
||||
popup_menu->reset_size();
|
||||
popup_menu->popup();
|
||||
@@ -3184,28 +3185,21 @@ void VisualShaderEditor::_show_members_dialog(bool at_mouse_pos, VisualShaderNod
|
||||
saved_node_pos_dirty = true;
|
||||
saved_node_pos = graph->get_local_mouse_position();
|
||||
|
||||
Point2 gpos = Input::get_singleton()->get_mouse_position();
|
||||
members_dialog->popup();
|
||||
Point2 gpos = get_screen_position() + get_local_mouse_position();
|
||||
members_dialog->set_position(gpos);
|
||||
} else {
|
||||
members_dialog->popup();
|
||||
saved_node_pos_dirty = false;
|
||||
members_dialog->set_position(graph->get_global_position() + Point2(5 * EDSCALE, 65 * EDSCALE));
|
||||
members_dialog->set_position(graph->get_screen_position() + Point2(5 * EDSCALE, 65 * EDSCALE));
|
||||
}
|
||||
members_dialog->popup();
|
||||
|
||||
// keep dialog within window bounds
|
||||
Size2 window_size = DisplayServer::get_singleton()->window_get_size();
|
||||
// Keep dialog within window bounds.
|
||||
Rect2 window_rect = Rect2(DisplayServer::get_singleton()->window_get_position(), DisplayServer::get_singleton()->window_get_size());
|
||||
Rect2 dialog_rect = Rect2(members_dialog->get_position(), members_dialog->get_size());
|
||||
if (dialog_rect.position.y + dialog_rect.size.y > window_size.y) {
|
||||
int difference = dialog_rect.position.y + dialog_rect.size.y - window_size.y;
|
||||
members_dialog->set_position(members_dialog->get_position() - Point2(0, difference));
|
||||
}
|
||||
if (dialog_rect.position.x + dialog_rect.size.x > window_size.x) {
|
||||
int difference = dialog_rect.position.x + dialog_rect.size.x - window_size.x;
|
||||
members_dialog->set_position(members_dialog->get_position() - Point2(difference, 0));
|
||||
}
|
||||
Vector2 difference = (dialog_rect.get_end() - window_rect.get_end()).max(Vector2());
|
||||
members_dialog->set_position(members_dialog->get_position() - difference);
|
||||
|
||||
node_filter->call_deferred(SNAME("grab_focus")); // still not visible
|
||||
node_filter->call_deferred(SNAME("grab_focus")); // Still not visible.
|
||||
node_filter->select_all();
|
||||
}
|
||||
|
||||
@@ -3781,10 +3775,10 @@ void VisualShaderEditor::_node_menu_id_pressed(int p_idx) {
|
||||
_convert_constants_to_uniforms(true);
|
||||
break;
|
||||
case NodeMenuOptions::SET_COMMENT_TITLE:
|
||||
_comment_title_popup_show(get_global_mouse_position(), selected_comment);
|
||||
_comment_title_popup_show(get_screen_position() + get_local_mouse_position(), selected_comment);
|
||||
break;
|
||||
case NodeMenuOptions::SET_COMMENT_DESCRIPTION:
|
||||
_comment_desc_popup_show(get_global_mouse_position(), selected_comment);
|
||||
_comment_desc_popup_show(get_screen_position() + get_local_mouse_position(), selected_comment);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user