Skip to content

Commit 1069d7b

Browse files
committed
Merge pull request #88343 from Riteo/warped-mouse-float
Handle warped mouse motion as floating point
2 parents 7ebc866 + 759a32e commit 1069d7b

File tree

4 files changed

+10
-10
lines changed

4 files changed

+10
-10
lines changed

core/input/input.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@ void Input::warp_mouse(const Vector2 &p_position) {
858858
warp_mouse_func(p_position);
859859
}
860860

861-
Point2i Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect) {
861+
Point2 Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect) {
862862
// The relative distance reported for the next event after a warp is in the boundaries of the
863863
// size of the rect on that axis, but it may be greater, in which case there's no problem as fmod()
864864
// will warp it, but if the pointer has moved in the opposite direction between the pointer relocation
@@ -868,14 +868,14 @@ Point2i Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, con
868868
// detect the warp: if the relative distance is greater than the half of the size of the relevant rect
869869
// (checked per each axis), it will be considered as the consequence of a former pointer warp.
870870

871-
const Point2i rel_sign(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1);
872-
const Size2i warp_margin = p_rect.size * 0.5f;
873-
const Point2i rel_warped(
871+
const Point2 rel_sign(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1);
872+
const Size2 warp_margin = p_rect.size * 0.5f;
873+
const Point2 rel_warped(
874874
Math::fmod(p_motion->get_relative().x + rel_sign.x * warp_margin.x, p_rect.size.x) - rel_sign.x * warp_margin.x,
875875
Math::fmod(p_motion->get_relative().y + rel_sign.y * warp_margin.y, p_rect.size.y) - rel_sign.y * warp_margin.y);
876876

877-
const Point2i pos_local = p_motion->get_global_position() - p_rect.position;
878-
const Point2i pos_warped(Math::fposmod(pos_local.x, p_rect.size.x), Math::fposmod(pos_local.y, p_rect.size.y));
877+
const Point2 pos_local = p_motion->get_global_position() - p_rect.position;
878+
const Point2 pos_warped(Math::fposmod(pos_local.x, p_rect.size.x), Math::fposmod(pos_local.y, p_rect.size.y));
879879
if (pos_warped != pos_local) {
880880
warp_mouse(pos_warped + p_rect.position);
881881
}

core/input/input.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ class Input : public Object {
316316
BitField<MouseButtonMask> get_mouse_button_mask() const;
317317

318318
void warp_mouse(const Vector2 &p_position);
319-
Point2i warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect);
319+
Point2 warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect);
320320

321321
void parse_input_event(const Ref<InputEvent> &p_event);
322322

editor/plugins/node_3d_editor_plugin.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2593,8 +2593,8 @@ void Node3DEditorViewport::scale_freelook_speed(real_t scale) {
25932593
surface->queue_redraw();
25942594
}
25952595

2596-
Point2i Node3DEditorViewport::_get_warped_mouse_motion(const Ref<InputEventMouseMotion> &p_ev_mouse_motion) const {
2597-
Point2i relative;
2596+
Point2 Node3DEditorViewport::_get_warped_mouse_motion(const Ref<InputEventMouseMotion> &p_ev_mouse_motion) const {
2597+
Point2 relative;
25982598
if (bool(EDITOR_GET("editors/3d/navigation/warped_mouse_panning"))) {
25992599
relative = Input::get_singleton()->warp_mouse_motion(p_ev_mouse_motion, surface->get_global_rect());
26002600
} else {

editor/plugins/node_3d_editor_plugin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ class Node3DEditorViewport : public Control {
430430
void _selection_result_pressed(int);
431431
void _selection_menu_hide();
432432
void _list_select(Ref<InputEventMouseButton> b);
433-
Point2i _get_warped_mouse_motion(const Ref<InputEventMouseMotion> &p_ev_mouse_motion) const;
433+
Point2 _get_warped_mouse_motion(const Ref<InputEventMouseMotion> &p_ev_mouse_motion) const;
434434

435435
Vector3 _get_instance_position(const Point2 &p_pos) const;
436436
static AABB _calculate_spatial_bounds(const Node3D *p_parent, const Node3D *p_top_level_parent = nullptr);

0 commit comments

Comments
 (0)