aboutsummaryrefslogtreecommitdiff
path: root/editor/plugins
diff options
context:
space:
mode:
authorPedro J. Estébanez2017-03-22 21:18:47 +0100
committerPedro J. Estébanez2017-03-22 21:18:47 +0100
commit2c2c48ffb3bd381d09d1e0e4389a2b86255fe20f (patch)
tree9c7dd950303a39941256a9e247215d1c4bcdd5e0 /editor/plugins
parent9c75b9dddf18abf315f62caa6745daa05d4adbaf (diff)
downloadgodot-2c2c48ffb3bd381d09d1e0e4389a2b86255fe20f.tar.gz
godot-2c2c48ffb3bd381d09d1e0e4389a2b86255fe20f.tar.zst
godot-2c2c48ffb3bd381d09d1e0e4389a2b86255fe20f.zip
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
Diffstat (limited to 'editor/plugins')
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp11
-rw-r--r--editor/plugins/spatial_editor_plugin.cpp10
2 files changed, 18 insertions, 3 deletions
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index e7189b0f4..f86f53168 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -1462,8 +1462,15 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent &p_event) {
if ((m.button_mask & BUTTON_MASK_LEFT && tool == TOOL_PAN) || m.button_mask & BUTTON_MASK_MIDDLE || (m.button_mask & BUTTON_MASK_LEFT && Input::get_singleton()->is_key_pressed(KEY_SPACE))) {
- h_scroll->set_val(h_scroll->get_val() - m.relative_x / zoom);
- v_scroll->set_val(v_scroll->get_val() - m.relative_y / zoom);
+ Point2i relative;
+ if (bool(EditorSettings::get_singleton()->get("2d_editor/warped_mouse_panning"))) {
+ relative = Input::get_singleton()->warp_mouse_motion(m, viewport->get_global_rect());
+ } else {
+ relative = Point2i(m.relative_x, m.relative_y);
+ }
+
+ h_scroll->set_val(h_scroll->get_val() - relative.x / zoom);
+ v_scroll->set_val(v_scroll->get_val() - relative.y / zoom);
}
return;
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;