Fix Emulate 3 Button Mouse behavior in 3D viewport

This commit is contained in:
Kent Thang 2024-09-26 18:32:24 +02:00
parent 99a7a9ccd6
commit 657221ba24
2 changed files with 11 additions and 4 deletions

View File

@ -344,7 +344,7 @@
</member>
<member name="editors/3d/navigation/emulate_3_button_mouse" type="bool" setter="" getter="">
If [code]true[/code], enables 3-button mouse emulation mode. This is useful on laptops when using a trackpad.
When 3-button mouse emulation mode is enabled, the pan, zoom and orbit modifiers can always be used in the 3D editor viewport, even when not holding down any mouse button.
When 3-button mouse emulation mode is enabled, the pan, zoom and orbit modifiers can be used in the 3D editor viewport when holding [kbd]Alt[/kbd], even when not holding down any mouse button.
</member>
<member name="editors/3d/navigation/emulate_numpad" type="bool" setter="" getter="">
If [code]true[/code], allows using the top row [kbd]0[/kbd]-[kbd]9[/kbd] keys to function as their equivalent numpad keys for 3D editor navigation. This should be enabled on keyboards that have no numeric keypad available.

View File

@ -2124,9 +2124,16 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
} else if (EDITOR_GET("editors/3d/navigation/emulate_3_button_mouse")) {
// Handle trackpad (no external mouse) use case
NavigationMode change_nav_from_shortcut = _get_nav_mode_from_shortcut_check(NAVIGATION_LEFT_MOUSE, shortcut_check_sets, true);
if (change_nav_from_shortcut != NAVIGATION_NONE) {
nav_mode = change_nav_from_shortcut;
// Check if the Alt key is pressed.
if (Input::get_singleton()->is_key_pressed(Key::ALT)) {
// Emulate the middle mouse button (Mouse3) with Alt for orbiting.
NavigationMode change_nav_from_shortcut = _get_nav_mode_from_shortcut_check(NAVIGATION_LEFT_MOUSE, shortcut_check_sets, true);
if (change_nav_from_shortcut != NAVIGATION_NONE) {
nav_mode = change_nav_from_shortcut;
}
} else {
// Regular behavior when Alt is not pressed, fallback to no navigation (NAVIGATION_NONE).
nav_mode = NAVIGATION_NONE;
}
}