diff --git a/core/os/input.cpp b/core/os/input.cpp index 1d7cd7c791a..e8a635e1b5f 100644 --- a/core/os/input.cpp +++ b/core/os/input.cpp @@ -85,6 +85,7 @@ void Input::_bind_methods() { ClassDB::bind_method(D_METHOD("warp_mouse_position", "to"), &Input::warp_mouse_position); ClassDB::bind_method(D_METHOD("action_press", "action"), &Input::action_press); ClassDB::bind_method(D_METHOD("action_release", "action"), &Input::action_release); + ClassDB::bind_method(D_METHOD("set_default_cursor_shape", "shape"), &Input::set_default_cursor_shape, DEFVAL(CURSOR_ARROW)); ClassDB::bind_method(D_METHOD("set_custom_mouse_cursor", "image", "shape", "hotspot"), &Input::set_custom_mouse_cursor, DEFVAL(CURSOR_ARROW), DEFVAL(Vector2())); ClassDB::bind_method(D_METHOD("parse_input_event", "event"), &Input::parse_input_event); diff --git a/core/os/input.h b/core/os/input.h index 9c7595ff7f2..fca68f27b75 100644 --- a/core/os/input.h +++ b/core/os/input.h @@ -119,6 +119,8 @@ public: virtual bool is_emulating_touchscreen() const = 0; + virtual CursorShape get_default_cursor_shape() = 0; + virtual void set_default_cursor_shape(CursorShape p_shape) = 0; virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape = CURSOR_ARROW, const Vector2 &p_hotspot = Vector2()) = 0; virtual void set_mouse_in_window(bool p_in_window) = 0; diff --git a/main/input_default.cpp b/main/input_default.cpp index ae330579596..1c73ecf2d27 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -495,6 +495,15 @@ bool InputDefault::is_emulating_touchscreen() const { return emulate_touch; } +Input::CursorShape InputDefault::get_default_cursor_shape() { + return default_shape; +} + +void InputDefault::set_default_cursor_shape(CursorShape p_shape) { + default_shape = p_shape; + OS::get_singleton()->set_cursor_shape((OS::CursorShape)p_shape); +} + void InputDefault::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) { if (Engine::get_singleton()->is_editor_hint()) return; diff --git a/main/input_default.h b/main/input_default.h index 7de6d3eca0d..384b04cf41c 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -115,6 +115,7 @@ class InputDefault : public Input { SpeedTrack mouse_speed_track; Map joy_names; int fallback_mapping; + CursorShape default_shape = CURSOR_ARROW; public: enum HatMask { @@ -225,6 +226,8 @@ public: void set_emulate_touch(bool p_emulate); virtual bool is_emulating_touchscreen() const; + virtual CursorShape get_default_cursor_shape(); + virtual void set_default_cursor_shape(CursorShape p_shape); virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape = Input::CURSOR_ARROW, const Vector2 &p_hotspot = Vector2()); virtual void set_mouse_in_window(bool p_in_window); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 45a969eeda2..568a7654200 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1814,7 +1814,7 @@ void Viewport::_gui_input_event(Ref p_event) { } if (!over) { - OS::get_singleton()->set_cursor_shape(OS::CURSOR_ARROW); + OS::get_singleton()->set_cursor_shape((OS::CursorShape)Input::get_singleton()->get_default_cursor_shape()); return; }