Merge pull request #101924 from adamscott/game-editor-non-cached-mouse-mode
Delegate handling `mouse_mode` to the `DisplayServer`
This commit is contained in:
@ -77,6 +77,10 @@ Input *Input::singleton = nullptr;
|
||||
|
||||
void (*Input::set_mouse_mode_func)(Input::MouseMode) = nullptr;
|
||||
Input::MouseMode (*Input::get_mouse_mode_func)() = nullptr;
|
||||
void (*Input::set_mouse_mode_override_func)(Input::MouseMode) = nullptr;
|
||||
Input::MouseMode (*Input::get_mouse_mode_override_func)() = nullptr;
|
||||
void (*Input::set_mouse_mode_override_enabled_func)(bool) = nullptr;
|
||||
bool (*Input::is_mouse_mode_override_enabled_func)() = nullptr;
|
||||
void (*Input::warp_mouse_func)(const Vector2 &p_position) = nullptr;
|
||||
Input::CursorShape (*Input::get_current_cursor_shape_func)() = nullptr;
|
||||
void (*Input::set_custom_mouse_cursor_func)(const Ref<Resource> &, Input::CursorShape, const Vector2 &) = nullptr;
|
||||
@ -86,51 +90,29 @@ Input *Input::get_singleton() {
|
||||
}
|
||||
|
||||
void Input::set_mouse_mode(MouseMode p_mode) {
|
||||
ERR_FAIL_INDEX((int)p_mode, 5);
|
||||
|
||||
if (p_mode == mouse_mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Allow to be set even if overridden, to see if the platform allows the mode.
|
||||
ERR_FAIL_INDEX(p_mode, MouseMode::MOUSE_MODE_MAX);
|
||||
set_mouse_mode_func(p_mode);
|
||||
mouse_mode = get_mouse_mode_func();
|
||||
|
||||
if (mouse_mode_override_enabled) {
|
||||
set_mouse_mode_func(mouse_mode_override);
|
||||
}
|
||||
}
|
||||
|
||||
Input::MouseMode Input::get_mouse_mode() const {
|
||||
return mouse_mode;
|
||||
}
|
||||
|
||||
void Input::set_mouse_mode_override_enabled(bool p_enabled) {
|
||||
if (p_enabled == mouse_mode_override_enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
mouse_mode_override_enabled = p_enabled;
|
||||
|
||||
if (p_enabled) {
|
||||
set_mouse_mode_func(mouse_mode_override);
|
||||
mouse_mode_override = get_mouse_mode_func();
|
||||
} else {
|
||||
set_mouse_mode_func(mouse_mode);
|
||||
}
|
||||
return get_mouse_mode_func();
|
||||
}
|
||||
|
||||
void Input::set_mouse_mode_override(MouseMode p_mode) {
|
||||
ERR_FAIL_INDEX((int)p_mode, 5);
|
||||
ERR_FAIL_INDEX(p_mode, MouseMode::MOUSE_MODE_MAX);
|
||||
set_mouse_mode_override_func(p_mode);
|
||||
}
|
||||
|
||||
if (p_mode == mouse_mode_override) {
|
||||
return;
|
||||
}
|
||||
Input::MouseMode Input::get_mouse_mode_override() const {
|
||||
return get_mouse_mode_override_func();
|
||||
}
|
||||
|
||||
if (mouse_mode_override_enabled) {
|
||||
set_mouse_mode_func(p_mode);
|
||||
mouse_mode_override = get_mouse_mode_func();
|
||||
}
|
||||
void Input::set_mouse_mode_override_enabled(bool p_override_enabled) {
|
||||
set_mouse_mode_override_enabled_func(p_override_enabled);
|
||||
}
|
||||
|
||||
bool Input::is_mouse_mode_override_enabled() {
|
||||
return is_mouse_mode_override_enabled_func();
|
||||
}
|
||||
|
||||
void Input::_bind_methods() {
|
||||
@ -199,6 +181,7 @@ void Input::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(MOUSE_MODE_CAPTURED);
|
||||
BIND_ENUM_CONSTANT(MOUSE_MODE_CONFINED);
|
||||
BIND_ENUM_CONSTANT(MOUSE_MODE_CONFINED_HIDDEN);
|
||||
BIND_ENUM_CONSTANT(MOUSE_MODE_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(CURSOR_ARROW);
|
||||
BIND_ENUM_CONSTANT(CURSOR_IBEAM);
|
||||
|
||||
@ -47,12 +47,14 @@ class Input : public Object {
|
||||
static constexpr uint64_t MAX_EVENT = 32;
|
||||
|
||||
public:
|
||||
// Keep synced with "DisplayServer::MouseMode" enum.
|
||||
enum MouseMode {
|
||||
MOUSE_MODE_VISIBLE,
|
||||
MOUSE_MODE_HIDDEN,
|
||||
MOUSE_MODE_CAPTURED,
|
||||
MOUSE_MODE_CONFINED,
|
||||
MOUSE_MODE_CONFINED_HIDDEN,
|
||||
MOUSE_MODE_MAX,
|
||||
};
|
||||
|
||||
#undef CursorShape
|
||||
@ -105,10 +107,6 @@ private:
|
||||
bool legacy_just_pressed_behavior = false;
|
||||
bool disable_input = false;
|
||||
|
||||
MouseMode mouse_mode = MOUSE_MODE_VISIBLE;
|
||||
bool mouse_mode_override_enabled = false;
|
||||
MouseMode mouse_mode_override = MOUSE_MODE_VISIBLE;
|
||||
|
||||
struct ActionState {
|
||||
uint64_t pressed_physics_frame = UINT64_MAX;
|
||||
uint64_t pressed_process_frame = UINT64_MAX;
|
||||
@ -268,6 +266,10 @@ private:
|
||||
|
||||
static void (*set_mouse_mode_func)(MouseMode);
|
||||
static MouseMode (*get_mouse_mode_func)();
|
||||
static void (*set_mouse_mode_override_func)(MouseMode);
|
||||
static MouseMode (*get_mouse_mode_override_func)();
|
||||
static void (*set_mouse_mode_override_enabled_func)(bool);
|
||||
static bool (*is_mouse_mode_override_enabled_func)();
|
||||
static void (*warp_mouse_func)(const Vector2 &p_position);
|
||||
|
||||
static CursorShape (*get_current_cursor_shape_func)();
|
||||
@ -286,8 +288,10 @@ protected:
|
||||
public:
|
||||
void set_mouse_mode(MouseMode p_mode);
|
||||
MouseMode get_mouse_mode() const;
|
||||
void set_mouse_mode_override_enabled(bool p_enabled);
|
||||
void set_mouse_mode_override(MouseMode p_mode);
|
||||
MouseMode get_mouse_mode_override() const;
|
||||
void set_mouse_mode_override_enabled(bool p_override_enabled);
|
||||
bool is_mouse_mode_override_enabled();
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override;
|
||||
|
||||
Reference in New Issue
Block a user