@@ -1314,7 +1314,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
13141314
13151315 Transform3D gt = spatial_editor->get_gizmo_transform ();
13161316
1317- if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) {
1317+ if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE) {
13181318 int col_axis = -1 ;
13191319 real_t col_d = 1e20 ;
13201320
@@ -1380,7 +1380,7 @@ bool Node3DEditorViewport::_transform_gizmo_select(const Vector2 &p_screenpos, b
13801380 }
13811381 }
13821382
1383- if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE) {
1383+ if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE) {
13841384 int col_axis = -1 ;
13851385 bool view_rotation_selected = false ;
13861386
@@ -2076,7 +2076,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
20762076 clicked = _select_ray (b->get_position ());
20772077
20782078 if (clicked.is_valid () && !editor_selection->is_selected (ObjectDB::get_instance<Node>(clicked))) {
2079- if (!node_selected || (!b->is_alt_pressed () && !(spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT && b->is_command_or_control_pressed ()))) {
2079+ if (!node_selected || (!b->is_alt_pressed () && !(spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM && b->is_command_or_control_pressed ()))) {
20802080 selection_in_progress = true ;
20812081 break ;
20822082 }
@@ -2086,7 +2086,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
20862086 if (node_selected) {
20872087 TransformMode mode = TRANSFORM_NONE;
20882088
2089- if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT ) {
2089+ if (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM ) {
20902090 if (b->is_command_or_control_pressed ()) {
20912091 mode = TRANSFORM_ROTATE;
20922092 } else if (b->is_alt_pressed ()) {
@@ -2127,7 +2127,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21272127 TransformMode mode = TRANSFORM_NONE;
21282128
21292129 switch (spatial_editor->get_tool_mode ()) {
2130- case Node3DEditor::TOOL_MODE_SELECT :
2130+ case Node3DEditor::TOOL_MODE_TRANSFORM :
21312131 if (b->is_command_or_control_pressed () && node_selected) {
21322132 mode = TRANSFORM_ROTATE;
21332133 } else if (b->is_alt_pressed () && node_selected) {
@@ -2188,13 +2188,13 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
21882188
21892189 if (clicked.is_valid () && _edit.mode == TRANSFORM_NONE) {
21902190 _select_clicked (false );
2191- }
2192-
2193- if (cursor.region_select ) {
2191+ } else if (cursor.region_select ) {
21942192 _select_region ();
2195- cursor.region_select = false ;
21962193 surface->queue_redraw ();
21972194 }
2195+
2196+ movement_threshold_passed = false ;
2197+ cursor.region_select = false ;
21982198 }
21992199
22002200 if (!_edit.instant && _edit.mode != TRANSFORM_NONE) {
@@ -2306,9 +2306,9 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
23062306 if (change_nav_from_shortcut != NAVIGATION_NONE) {
23072307 nav_mode = change_nav_from_shortcut;
23082308 } else {
2309- const bool movement_threshold_passed = _edit.original_mouse_pos .distance_to (_edit.mouse_pos ) > 8 * EDSCALE;
2309+ movement_threshold_passed = _edit.original_mouse_pos .distance_to (_edit.mouse_pos ) > 8 * EDSCALE;
23102310
2311- if ((selection_in_progress || clicked_wants_append) && movement_threshold_passed && clicked.is_valid ()) {
2311+ if ((selection_in_progress || clicked_wants_append || spatial_editor-> get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT ) && movement_threshold_passed && clicked.is_valid ()) {
23122312 cursor.region_select = true ;
23132313 cursor.region_begin = _edit.original_mouse_pos ;
23142314 clicked = ObjectID ();
@@ -2320,8 +2320,8 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
23202320 return ;
23212321 }
23222322
2323- if (clicked.is_valid () && movement_threshold_passed && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_MOVE)) {
2324- bool is_select_mode = (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT );
2323+ 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)) {
2324+ bool is_select_mode = (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM );
23252325 bool is_clicked_selected = editor_selection->is_selected (ObjectDB::get_instance<Node>(clicked));
23262326
23272327 if (_edit.mode == TRANSFORM_NONE && (is_select_mode || is_clicked_selected)) {
@@ -3678,7 +3678,7 @@ void Node3DEditorViewport::_draw() {
36783678 get_theme_stylebox (SNAME (" FocusViewport" ), EditorStringName (EditorStyles))->draw (surface->get_canvas_item (), r);
36793679 }
36803680
3681- if (cursor.region_select ) {
3681+ if (cursor.region_select && movement_threshold_passed ) {
36823682 const Rect2 selection_rect = Rect2 (cursor.region_begin , cursor.region_end - cursor.region_begin );
36833683
36843684 surface->draw_rect (
@@ -4582,7 +4582,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
45824582 bool hide_during_rotation = _is_rotation_arc_visible ();
45834583
45844584 bool show_gizmo = spatial_editor->is_gizmo_visible () && !_edit.instant && transform_gizmo_visible && !collision_reposition && !hide_during_rotation;
4585- bool show_rotate_gizmo = show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE);
4585+ bool show_rotate_gizmo = show_gizmo && (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM || spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_ROTATE);
45864586
45874587 for (int i = 0 ; i < 3 ; i++) {
45884588 Transform3D axis_angle;
@@ -4592,9 +4592,9 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
45924592 axis_angle.basis .scale (scale);
45934593 axis_angle.origin = xform.origin ;
45944594 RenderingServer::get_singleton ()->instance_set_transform (move_gizmo_instance[i], axis_angle);
4595- 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));
4595+ 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));
45964596 RenderingServer::get_singleton ()->instance_set_transform (move_plane_gizmo_instance[i], axis_angle);
4597- 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));
4597+ 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));
45984598 RenderingServer::get_singleton ()->instance_set_transform (rotate_gizmo_instance[i], axis_angle);
45994599 RenderingServer::get_singleton ()->instance_set_visible (rotate_gizmo_instance[i], show_rotate_gizmo);
46004600 RenderingServer::get_singleton ()->instance_set_transform (scale_gizmo_instance[i], axis_angle);
@@ -7355,6 +7355,7 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
73557355 case MENU_TOOL_MOVE:
73567356 case MENU_TOOL_ROTATE:
73577357 case MENU_TOOL_SCALE:
7358+ case MENU_TOOL_TRANSFORM:
73587359 case MENU_TOOL_LIST_SELECT: {
73597360 for (int i = 0 ; i < TOOL_MAX; i++) {
73607361 tool_button[i]->set_pressed (i == p_option);
@@ -8843,6 +8844,7 @@ void Node3DEditor::_update_theme() {
88438844 tool_button[TOOL_MODE_MOVE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolMove" )));
88448845 tool_button[TOOL_MODE_ROTATE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolRotate" )));
88458846 tool_button[TOOL_MODE_SCALE]->set_button_icon (get_editor_theme_icon (SNAME (" ToolScale" )));
8847+ tool_button[TOOL_MODE_TRANSFORM]->set_button_icon (get_editor_theme_icon (SNAME (" ToolTransform" )));
88468848 tool_button[TOOL_MODE_LIST_SELECT]->set_button_icon (get_editor_theme_icon (SNAME (" ListSelect" )));
88478849 tool_button[TOOL_LOCK_SELECTED]->set_button_icon (get_editor_theme_icon (SNAME (" Lock" )));
88488850 tool_button[TOOL_UNLOCK_SELECTED]->set_button_icon (get_editor_theme_icon (SNAME (" Unlock" )));
@@ -8877,7 +8879,8 @@ void Node3DEditor::_update_theme() {
88778879void Node3DEditor::_notification (int p_what) {
88788880 switch (p_what) {
88798881 case NOTIFICATION_TRANSLATION_CHANGED: {
8880- 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.)" ));
8882+ 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.)" ));
8883+ 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.)" ));
88818884 tool_button[TOOL_MODE_MOVE]->set_tooltip_text (keycode_get_string ((Key)KeyModifierMask::CMD_OR_CTRL) + TTR (" Drag: Use snap." ) + " \n " + TTR (" Alt+RMB: Show list of all nodes at position clicked, including locked." ));
88828885 tool_button[TOOL_MODE_ROTATE]->set_tooltip_text (keycode_get_string ((Key)KeyModifierMask::CMD_OR_CTRL) + TTR (" Drag: Use snap." ) + " \n " + TTR (" Alt+RMB: Show list of all nodes at position clicked, including locked." ));
88838886 tool_button[TOOL_MODE_SCALE]->set_tooltip_text (keycode_get_string ((Key)KeyModifierMask::CMD_OR_CTRL) + TTR (" Drag: Use snap." ) + " \n " + TTR (" Alt+RMB: Show list of all nodes at position clicked, including locked." ));
@@ -9706,6 +9709,7 @@ Node3DEditor::Node3DEditor() {
97069709 tool_button[TOOL_MODE_SELECT]->set_shortcut (ED_SHORTCUT (" spatial_editor/tool_select" , TTRC (" Select Mode" ), Key::Q, true ));
97079710 tool_button[TOOL_MODE_SELECT]->set_shortcut_context (this );
97089711 tool_button[TOOL_MODE_SELECT]->set_accessibility_name (TTRC (" Select Mode" ));
9712+
97099713 main_menu_hbox->add_child (memnew (VSeparator));
97109714
97119715 tool_button[TOOL_MODE_MOVE] = memnew (Button);
@@ -9739,6 +9743,15 @@ Node3DEditor::Node3DEditor() {
97399743 tool_button[TOOL_MODE_SCALE]->set_shortcut_context (this );
97409744 tool_button[TOOL_MODE_SCALE]->set_accessibility_name (TTRC (" Scale Mode" ));
97419745
9746+ tool_button[TOOL_MODE_TRANSFORM] = memnew (Button);
9747+ main_menu_hbox->add_child (tool_button[TOOL_MODE_TRANSFORM]);
9748+ tool_button[TOOL_MODE_TRANSFORM]->set_toggle_mode (true );
9749+ tool_button[TOOL_MODE_TRANSFORM]->set_theme_type_variation (SceneStringName (FlatButton));
9750+ tool_button[TOOL_MODE_TRANSFORM]->connect (SceneStringName (pressed), callable_mp (this , &Node3DEditor::_menu_item_pressed).bind (MENU_TOOL_TRANSFORM));
9751+ tool_button[TOOL_MODE_TRANSFORM]->set_shortcut (ED_SHORTCUT (" spatial_editor/tool_transform" , TTRC (" Transform Mode" ), Key::V, true ));
9752+ tool_button[TOOL_MODE_TRANSFORM]->set_shortcut_context (this );
9753+ tool_button[TOOL_MODE_TRANSFORM]->set_accessibility_name (TTRC (" Transform Mode" ));
9754+
97429755 main_menu_hbox->add_child (memnew (VSeparator));
97439756
97449757 tool_button[TOOL_MODE_LIST_SELECT] = memnew (Button);
0 commit comments