Implement Input.set_default_cursor_shape to change the default shape

Closes #18043
This commit is contained in:
Guilherme Felipe 2018-04-09 17:48:24 -03:00
parent 48890b15c5
commit 4f05190fb0
5 changed files with 16 additions and 1 deletions

View file

@ -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("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_press", "action"), &Input::action_press);
ClassDB::bind_method(D_METHOD("action_release", "action"), &Input::action_release); 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("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); ClassDB::bind_method(D_METHOD("parse_input_event", "event"), &Input::parse_input_event);

View file

@ -119,6 +119,8 @@ public:
virtual bool is_emulating_touchscreen() const = 0; 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_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; virtual void set_mouse_in_window(bool p_in_window) = 0;

View file

@ -495,6 +495,15 @@ bool InputDefault::is_emulating_touchscreen() const {
return emulate_touch; 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) { void InputDefault::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) {
if (Engine::get_singleton()->is_editor_hint()) if (Engine::get_singleton()->is_editor_hint())
return; return;

View file

@ -115,6 +115,7 @@ class InputDefault : public Input {
SpeedTrack mouse_speed_track; SpeedTrack mouse_speed_track;
Map<int, Joypad> joy_names; Map<int, Joypad> joy_names;
int fallback_mapping; int fallback_mapping;
CursorShape default_shape = CURSOR_ARROW;
public: public:
enum HatMask { enum HatMask {
@ -225,6 +226,8 @@ public:
void set_emulate_touch(bool p_emulate); void set_emulate_touch(bool p_emulate);
virtual bool is_emulating_touchscreen() const; 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_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); virtual void set_mouse_in_window(bool p_in_window);

View file

@ -1814,7 +1814,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
} }
if (!over) { 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; return;
} }