|
@@ -1021,6 +1021,32 @@ void CanvasItemEditor::_selection_menu_hide() {
|
|
selection_menu->set_size(Vector2(0, 0));
|
|
selection_menu->set_size(Vector2(0, 0));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void CanvasItemEditor::_add_node_pressed(int p_result) {
|
|
|
|
+ if (p_result == AddNodeOption::ADD_NODE) {
|
|
|
|
+ editor->get_scene_tree_dock()->open_add_child_dialog();
|
|
|
|
+ } else if (p_result == AddNodeOption::ADD_INSTANCE) {
|
|
|
|
+ editor->get_scene_tree_dock()->open_instance_child_dialog();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void CanvasItemEditor::_node_created(Node *p_node) {
|
|
|
|
+ if (node_create_position == Point2()) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ CanvasItem *c = Object::cast_to<CanvasItem>(p_node);
|
|
|
|
+ if (c) {
|
|
|
|
+ Transform2D xform = c->get_global_transform_with_canvas().affine_inverse() * c->get_transform();
|
|
|
|
+ c->_edit_set_position(xform.xform(node_create_position));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ call_deferred("_reset_create_position"); // Defer the call in case more than one node is added.
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void CanvasItemEditor::_reset_create_position() {
|
|
|
|
+ node_create_position = Point2();
|
|
|
|
+}
|
|
|
|
+
|
|
bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_event) {
|
|
bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_event) {
|
|
Ref<InputEventMouseButton> b = p_event;
|
|
Ref<InputEventMouseButton> b = p_event;
|
|
Ref<InputEventMouseMotion> m = p_event;
|
|
Ref<InputEventMouseMotion> m = p_event;
|
|
@@ -2463,6 +2489,14 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (b.is_valid() && b->is_pressed() && b->get_button_index() == BUTTON_RIGHT && b->get_control()) {
|
|
|
|
+ add_node_menu->set_position(get_global_transform().xform(get_local_mouse_position()));
|
|
|
|
+ add_node_menu->set_size(Vector2(1, 1));
|
|
|
|
+ add_node_menu->popup();
|
|
|
|
+ node_create_position = transform.affine_inverse().xform((get_local_mouse_position()));
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT) {
|
|
if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed() && tool == TOOL_SELECT) {
|
|
// Single item selection
|
|
// Single item selection
|
|
Point2 click = transform.affine_inverse().xform(b->get_position());
|
|
Point2 click = transform.affine_inverse().xform(b->get_position());
|
|
@@ -5364,6 +5398,7 @@ void CanvasItemEditor::_bind_methods() {
|
|
ClassDB::bind_method("_unhandled_key_input", &CanvasItemEditor::_unhandled_key_input);
|
|
ClassDB::bind_method("_unhandled_key_input", &CanvasItemEditor::_unhandled_key_input);
|
|
ClassDB::bind_method("_queue_update_bone_list", &CanvasItemEditor::_update_bone_list);
|
|
ClassDB::bind_method("_queue_update_bone_list", &CanvasItemEditor::_update_bone_list);
|
|
ClassDB::bind_method("_update_bone_list", &CanvasItemEditor::_update_bone_list);
|
|
ClassDB::bind_method("_update_bone_list", &CanvasItemEditor::_update_bone_list);
|
|
|
|
+ ClassDB::bind_method("_reset_create_position", &CanvasItemEditor::_reset_create_position);
|
|
ClassDB::bind_method(D_METHOD("set_state"), &CanvasItemEditor::set_state);
|
|
ClassDB::bind_method(D_METHOD("set_state"), &CanvasItemEditor::set_state);
|
|
ClassDB::bind_method(D_METHOD("update_viewport"), &CanvasItemEditor::update_viewport);
|
|
ClassDB::bind_method(D_METHOD("update_viewport"), &CanvasItemEditor::update_viewport);
|
|
|
|
|
|
@@ -5685,6 +5720,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
|
editor_selection->connect("selection_changed", callable_mp((CanvasItem *)this, &CanvasItem::update));
|
|
editor_selection->connect("selection_changed", callable_mp((CanvasItem *)this, &CanvasItem::update));
|
|
editor_selection->connect("selection_changed", callable_mp(this, &CanvasItemEditor::_selection_changed));
|
|
editor_selection->connect("selection_changed", callable_mp(this, &CanvasItemEditor::_selection_changed));
|
|
|
|
|
|
|
|
+ editor->get_scene_tree_dock()->connect("node_created", callable_mp(this, &CanvasItemEditor::_node_created));
|
|
|
|
+ editor->get_scene_tree_dock()->connect("add_node_used", callable_mp(this, &CanvasItemEditor::_reset_create_position));
|
|
|
|
+
|
|
editor->call_deferred("connect", "play_pressed", Callable(this, "_update_override_camera_button"), make_binds(true));
|
|
editor->call_deferred("connect", "play_pressed", Callable(this, "_update_override_camera_button"), make_binds(true));
|
|
editor->call_deferred("connect", "stop_pressed", Callable(this, "_update_override_camera_button"), make_binds(false));
|
|
editor->call_deferred("connect", "stop_pressed", Callable(this, "_update_override_camera_button"), make_binds(false));
|
|
|
|
|
|
@@ -6106,6 +6144,12 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
|
selection_menu->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_selection_result_pressed));
|
|
selection_menu->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_selection_result_pressed));
|
|
selection_menu->connect("popup_hide", callable_mp(this, &CanvasItemEditor::_selection_menu_hide));
|
|
selection_menu->connect("popup_hide", callable_mp(this, &CanvasItemEditor::_selection_menu_hide));
|
|
|
|
|
|
|
|
+ add_node_menu = memnew(PopupMenu);
|
|
|
|
+ add_child(add_node_menu);
|
|
|
|
+ add_node_menu->add_icon_item(editor->get_scene_tree_dock()->get_theme_icon("Add", "EditorIcons"), TTR("Add Node Here"));
|
|
|
|
+ add_node_menu->add_icon_item(editor->get_scene_tree_dock()->get_theme_icon("Instance", "EditorIcons"), TTR("Instance Scene Here"));
|
|
|
|
+ add_node_menu->connect("id_pressed", callable_mp(this, &CanvasItemEditor::_add_node_pressed));
|
|
|
|
+
|
|
multiply_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/multiply_grid_step", TTR("Multiply grid step by 2"), KEY_KP_MULTIPLY);
|
|
multiply_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/multiply_grid_step", TTR("Multiply grid step by 2"), KEY_KP_MULTIPLY);
|
|
divide_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/divide_grid_step", TTR("Divide grid step by 2"), KEY_KP_DIVIDE);
|
|
divide_grid_step_shortcut = ED_SHORTCUT("canvas_item_editor/divide_grid_step", TTR("Divide grid step by 2"), KEY_KP_DIVIDE);
|
|
pan_view_shortcut = ED_SHORTCUT("canvas_item_editor/pan_view", TTR("Pan View"), KEY_SPACE);
|
|
pan_view_shortcut = ED_SHORTCUT("canvas_item_editor/pan_view", TTR("Pan View"), KEY_SPACE);
|