Skip to content

Commit 11ba422

Browse files
committed
Merge pull request #101168 from ryevdokimov/real-select-mode
Rename Select Mode to Transform Mode, and create a new Select Mode without transform gizmo
2 parents c5bb2dc + 0b93712 commit 11ba422

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

editor/icons/ToolTransform.svg

Lines changed: 1 addition & 0 deletions
Loading

editor/scene/3d/node_3d_editor_plugin.cpp

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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() {
88778879
void 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);

editor/scene/3d/node_3d_editor_plugin.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ class Node3DEditorViewport : public Control {
334334
Vector<Node3D *> selection_results_menu;
335335
bool clicked_wants_append = false;
336336
bool selection_in_progress = false;
337+
bool movement_threshold_passed = false;
337338

338339
PopupMenu *selection_menu = nullptr;
339340

@@ -662,6 +663,7 @@ class Node3DEditor : public VBoxContainer {
662663
TOOL_MODE_MOVE,
663664
TOOL_MODE_ROTATE,
664665
TOOL_MODE_SCALE,
666+
TOOL_MODE_TRANSFORM,
665667
TOOL_MODE_LIST_SELECT,
666668
TOOL_LOCK_SELECTED,
667669
TOOL_UNLOCK_SELECTED,
@@ -762,6 +764,7 @@ class Node3DEditor : public VBoxContainer {
762764
MENU_TOOL_MOVE,
763765
MENU_TOOL_ROTATE,
764766
MENU_TOOL_SCALE,
767+
MENU_TOOL_TRANSFORM,
765768
MENU_TOOL_LIST_SELECT,
766769
MENU_TOOL_LOCAL_COORDS,
767770
MENU_TOOL_USE_SNAP,

0 commit comments

Comments
 (0)