@@ -1298,7 +1298,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
12981298
12991299 Transform3D gt = spatial_editor->get_gizmo_transform ();
13001300
1301- if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) {
1301+ if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) {
13021302 int col_axis = -1 ;
13031303 real_t col_d = 1e20 ;
13041304
@@ -1364,7 +1364,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
13641364 }
13651365 }
13661366
1367- if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE) {
1367+ if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE) {
13681368 int col_axis = -1 ;
13691369
13701370 Vector3 hit_position;
@@ -1971,7 +1971,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
19711971
19721972 selection_in_progress = true ;
19731973
1974- if (clicked.is_null ()) {
1974+ if (clicked.is_null () || spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT ) {
19751975 // Default to region select.
19761976 cursor.region_select = true ;
19771977 cursor.region_begin = b->get_position ();
@@ -2000,15 +2000,15 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
20002000 if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) {
20012001 selection_in_progress = false ;
20022002
2003- if (clicked.is_valid ()) {
2003+ if (clicked.is_valid () && !movement_threshold_passed ) {
20042004 _select_clicked (false );
2005- }
2006-
2007- if (cursor.region_select ) {
2005+ } else if (cursor.region_select ) {
20082006 _select_region ();
2009- cursor.region_select = false ;
20102007 surface->queue_redraw ();
20112008 }
2009+
2010+ movement_threshold_passed = false ;
2011+ cursor.region_select = false ;
20122012 }
20132013
20142014 if (!_edit.instant && _edit.mode != TRANSFORM_NONE) {
@@ -2118,7 +2118,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21182118 if (change_nav_from_shortcut != NAVIGATION_NONE) {
21192119 nav_mode = change_nav_from_shortcut;
21202120 } else {
2121- const bool movement_threshold_passed = _edit.original_mouse_pos .distance_to (_edit.mouse_pos ) > 8 * EDSCALE;
2121+ movement_threshold_passed = _edit.original_mouse_pos .distance_to (_edit.mouse_pos ) > 8 * EDSCALE;
21222122
21232123 if (selection_in_progress && movement_threshold_passed && clicked.is_valid ()) {
21242124 if (clicked_wants_append || !editor_selection->is_selected (ObjectDB::get_instance<Node>(clicked))) {
@@ -2134,7 +2134,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21342134 return ;
21352135 }
21362136
2137- if (clicked.is_valid () && movement_threshold_passed) {
2137+ if (clicked.is_valid () && movement_threshold_passed && (spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) ) {
21382138 _compute_edit (_edit.original_mouse_pos );
21392139 clicked = ObjectID ();
21402140 _edit.mode = TRANSFORM_TRANSLATE;
@@ -3355,7 +3355,7 @@ void Node3DEditorViewport::_draw() {
33553355 get_theme_stylebox (SNAME (" FocusViewport" ), EditorStringName (EditorStyles))->draw (surface->get_canvas_item (), r);
33563356 }
33573357
3358- if (cursor.region_select ) {
3358+ if (cursor.region_select && movement_threshold_passed ) {
33593359 const Rect2 selection_rect = Rect2 (cursor.region_begin , cursor.region_end - cursor.region_begin );
33603360
33613361 surface->draw_rect (
@@ -4122,11 +4122,11 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
41224122 axis_angle.basis .scale (scale);
41234123 axis_angle.origin = xform.origin ;
41244124 RenderingServer::get_singleton ()->instance_set_transform (move_gizmo_instance[i], axis_angle);
4125- RenderingServer::get_singleton ()->instance_set_visible (move_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE));
4125+ RenderingServer::get_singleton ()->instance_set_visible (move_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE));
41264126 RenderingServer::get_singleton ()->instance_set_transform (move_plane_gizmo_instance[i], axis_angle);
4127- RenderingServer::get_singleton ()->instance_set_visible (move_plane_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE));
4127+ RenderingServer::get_singleton ()->instance_set_visible (move_plane_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE));
41284128 RenderingServer::get_singleton ()->instance_set_transform (rotate_gizmo_instance[i], axis_angle);
4129- RenderingServer::get_singleton ()->instance_set_visible (rotate_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE));
4129+ RenderingServer::get_singleton ()->instance_set_visible (rotate_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE));
41304130 RenderingServer::get_singleton ()->instance_set_transform (scale_gizmo_instance[i], axis_angle);
41314131 RenderingServer::get_singleton ()->instance_set_visible (scale_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SCALE));
41324132 RenderingServer::get_singleton ()->instance_set_transform (scale_plane_gizmo_instance[i], axis_angle);
@@ -4144,7 +4144,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
41444144 xform.orthonormalize ();
41454145 xform.basis .scale (scale);
41464146 RenderingServer::get_singleton ()->instance_set_transform (rotate_gizmo_instance[3 ], xform);
4147- RenderingServer::get_singleton ()->instance_set_visible (rotate_gizmo_instance[3 ], spatial_editor->is_gizmo_visible () && !_edit.instant && transform_gizmo_visible && !collision_reposition && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE));
4147+ RenderingServer::get_singleton ()->instance_set_visible (rotate_gizmo_instance[3 ], spatial_editor->is_gizmo_visible () && !_edit.instant && transform_gizmo_visible && !collision_reposition && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE));
41484148}
41494149
41504150void Node3DEditorViewport::set_state (const Dictionary &p_state) {
@@ -6844,6 +6844,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
68446844 EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton ();
68456845 switch (p_option) {
68466846 case MENU_TOOL_SELECT:
6847+ case MENU_TOOL_TRANSFORM:
68476848 case MENU_TOOL_MOVE:
68486849 case MENU_TOOL_ROTATE:
68496850 case MENU_TOOL_SCALE:
@@ -8254,6 +8255,7 @@ void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
82548255
82558256void Node3DEditor::_update_theme () {
82568257 tool_button[TOOL_MODE_SELECT]->set_button_icon (get_editor_theme_icon (SNAME (" ToolSelect" )));
8258+ tool_button[TOOL_MODE_TRANSFORM]->set_button_icon (get_editor_theme_icon (SNAME (" ToolTransform" )));
82578259 tool_button[TOOL_MODE_MOVE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolMove" )));
82588260 tool_button[TOOL_MODE_ROTATE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolRotate" )));
82598261 tool_button[TOOL_MODE_SCALE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolScale" )));
@@ -9108,12 +9110,22 @@ Node3DEditor::Node3DEditor() {
91089110 tool_button[TOOL_MODE_SELECT]->set_theme_type_variation (SceneStringName (FlatButton));
91099111 tool_button[TOOL_MODE_SELECT]->set_pressed (true );
91109112 tool_button[TOOL_MODE_SELECT]->connect (SceneStringName (pressed), callable_mp (this , &Node3DEditor::_menu_item_pressed).bind (MENU_TOOL_SELECT));
9111- tool_button[TOOL_MODE_SELECT]->set_shortcut (ED_SHORTCUT (" spatial_editor/tool_select" , TTRC (" Select Mode" ), Key::Q , true ));
9113+ tool_button[TOOL_MODE_SELECT]->set_shortcut (ED_SHORTCUT (" spatial_editor/tool_select" , TTRC (" Select Mode" ), Key::V , true ));
91129114 tool_button[TOOL_MODE_SELECT]->set_shortcut_context (this );
9113- tool_button[TOOL_MODE_SELECT]->set_tooltip_text (keycode_get_string ((Key)KeyModifierMask::CMD_OR_CTRL) + TTR ( " Drag: Rotate selected node around pivot. " ) + " \n " + TTR (" Alt+RMB: Show list of all nodes at position clicked, including locked." ) + " \n " + TTR (" (Available in all modes.)" ));
9115+ tool_button[TOOL_MODE_SELECT]->set_tooltip_text (TTR (" Alt+RMB: Show list of all nodes at position clicked, including locked." ) + " \n " + TTR (" (Available in all modes.)" ));
91149116 tool_button[TOOL_MODE_SELECT]->set_accessibility_name (TTRC (" Select Mode" ));
91159117 main_menu_hbox->add_child (memnew (VSeparator));
91169118
9119+ tool_button[TOOL_MODE_TRANSFORM] = memnew (Button);
9120+ main_menu_hbox->add_child (tool_button[TOOL_MODE_TRANSFORM]);
9121+ tool_button[TOOL_MODE_TRANSFORM]->set_toggle_mode (true );
9122+ tool_button[TOOL_MODE_TRANSFORM]->set_theme_type_variation (SceneStringName (FlatButton));
9123+ tool_button[TOOL_MODE_TRANSFORM]->connect (SceneStringName (pressed), callable_mp (this , &Node3DEditor::_menu_item_pressed).bind (MENU_TOOL_TRANSFORM));
9124+ tool_button[TOOL_MODE_TRANSFORM]->set_shortcut (ED_SHORTCUT (" spatial_editor/tool_transform" , TTRC (" Transform Mode" ), Key::Q, true ));
9125+ tool_button[TOOL_MODE_TRANSFORM]->set_shortcut_context (this );
9126+ tool_button[TOOL_MODE_TRANSFORM]->set_tooltip_text (keycode_get_string ((Key)KeyModifierMask::CMD_OR_CTRL) + TTR (" Drag: Rotate selected node around pivot." ) + " \n " + TTR (" Alt+RMB: Show list of all nodes at position clicked, including locked." ) + " \n " + TTR (" (Available in all modes.)" ));
9127+ tool_button[TOOL_MODE_SELECT]->set_accessibility_name (TTRC (" Transform Mode" ));
9128+
91179129 tool_button[TOOL_MODE_MOVE] = memnew (Button);
91189130 main_menu_hbox->add_child (tool_button[TOOL_MODE_MOVE]);
91199131 tool_button[TOOL_MODE_MOVE]->set_toggle_mode (true );
0 commit comments