From 2c2c48ffb3bd381d09d1e0e4389a2b86255fe20f Mon Sep 17 00:00:00 2001 From: Pedro J. Estébanez Date: Wed, 22 Mar 2017 21:18:47 +0100 Subject: Implement warped mouse panning for 2D & 3D editors Enabled by default as in Blender, but can be disabled separately for 2D & 3D; the core functionality is in Input so this could be reused or even exposed to scripts in the future --- editor/plugins/spatial_editor_plugin.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'editor/plugins/spatial_editor_plugin.cpp') diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index b66b2be05..dddf80ac5 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -30,6 +30,7 @@ #include "print_string.h" #include "camera_matrix.h" +#include "core/os/input.h" #include "editor/animation_editor.h" #include "editor/editor_node.h" #include "editor/editor_settings.h" @@ -1470,12 +1471,19 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) { if (nav_scheme == NAVIGATION_MAYA && m.mod.shift) pan_speed *= pan_speed_modifier; + Point2i relative; + if (bool(EditorSettings::get_singleton()->get("3d_editor/warped_mouse_panning"))) { + relative = Input::get_singleton()->warp_mouse_motion(m, surface->get_global_rect()); + } else { + relative = Point2i(m.relative_x, m.relative_y); + } + Transform camera_transform; camera_transform.translate(cursor.pos); camera_transform.basis.rotate(Vector3(0, 1, 0), cursor.y_rot); camera_transform.basis.rotate(Vector3(1, 0, 0), cursor.x_rot); - Vector3 translation(-m.relative_x * pan_speed, m.relative_y * pan_speed, 0); + Vector3 translation(-relative.x * pan_speed, relative.y * pan_speed, 0); translation *= cursor.distance / DISTANCE_DEFAULT; camera_transform.translate(translation); cursor.pos = camera_transform.origin; -- cgit v1.3