Made serialization of Command toggleable when saving InputEvents.
Made serialization of Command optional. If command is serialized, Control (On Win/Linux) or Meta (on Mac) are not. Example use case: You are on Windows and you set a shortcut to be Control + E. This would serialize as Command=true and Control=true. If you then run this project on Mac, you would need to press Command AND Control to activate the shortcut - which is not what is intended. Now, you can set store_command to true, and it will only serialize to Command = true (no Control serialized). On Windows, this means Control. On Mac, it means only command.
This commit is contained in:
parent
593e35346a
commit
c92f83d3ca
|
@ -138,6 +138,14 @@ int64_t InputEventFromWindow::get_window_id() const {
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
|
|
||||||
|
void InputEventWithModifiers::set_store_command(bool p_enabled) {
|
||||||
|
store_command = p_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InputEventWithModifiers::is_storing_command() const {
|
||||||
|
return store_command;
|
||||||
|
}
|
||||||
|
|
||||||
void InputEventWithModifiers::set_shift(bool p_enabled) {
|
void InputEventWithModifiers::set_shift(bool p_enabled) {
|
||||||
shift = p_enabled;
|
shift = p_enabled;
|
||||||
}
|
}
|
||||||
|
@ -186,6 +194,9 @@ void InputEventWithModifiers::set_modifiers_from_event(const InputEventWithModif
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputEventWithModifiers::_bind_methods() {
|
void InputEventWithModifiers::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("set_store_command", "enable"), &InputEventWithModifiers::set_store_command);
|
||||||
|
ClassDB::bind_method(D_METHOD("is_storing_command"), &InputEventWithModifiers::is_storing_command);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_alt", "enable"), &InputEventWithModifiers::set_alt);
|
ClassDB::bind_method(D_METHOD("set_alt", "enable"), &InputEventWithModifiers::set_alt);
|
||||||
ClassDB::bind_method(D_METHOD("get_alt"), &InputEventWithModifiers::get_alt);
|
ClassDB::bind_method(D_METHOD("get_alt"), &InputEventWithModifiers::get_alt);
|
||||||
|
|
||||||
|
@ -201,6 +212,7 @@ void InputEventWithModifiers::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_command", "enable"), &InputEventWithModifiers::set_command);
|
ClassDB::bind_method(D_METHOD("set_command", "enable"), &InputEventWithModifiers::set_command);
|
||||||
ClassDB::bind_method(D_METHOD("get_command"), &InputEventWithModifiers::get_command);
|
ClassDB::bind_method(D_METHOD("get_command"), &InputEventWithModifiers::get_command);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "store_command"), "set_store_command", "is_storing_command");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "alt"), "set_alt", "get_alt");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "alt"), "set_alt", "get_alt");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shift"), "set_shift", "get_shift");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shift"), "set_shift", "get_shift");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "control"), "set_control", "get_control");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "control"), "set_control", "get_control");
|
||||||
|
@ -208,6 +220,28 @@ void InputEventWithModifiers::_bind_methods() {
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "command"), "set_command", "get_command");
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "command"), "set_command", "get_command");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputEventWithModifiers::_validate_property(PropertyInfo &property) const {
|
||||||
|
if (store_command) {
|
||||||
|
// If we only want to Store "Command".
|
||||||
|
#ifdef APPLE_STYLE_KEYS
|
||||||
|
// Don't store "Meta" on Mac.
|
||||||
|
if (property.name == "meta") {
|
||||||
|
property.usage ^= PROPERTY_USAGE_STORAGE;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Don't store "Control".
|
||||||
|
if (property.name == "control") {
|
||||||
|
property.usage ^= PROPERTY_USAGE_STORAGE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
// We don't want to store command, only control or meta (on mac).
|
||||||
|
if (property.name == "command") {
|
||||||
|
property.usage ^= PROPERTY_USAGE_STORAGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
|
|
||||||
void InputEventKey::set_pressed(bool p_pressed) {
|
void InputEventKey::set_pressed(bool p_pressed) {
|
||||||
|
|
|
@ -209,6 +209,8 @@ public:
|
||||||
class InputEventWithModifiers : public InputEventFromWindow {
|
class InputEventWithModifiers : public InputEventFromWindow {
|
||||||
GDCLASS(InputEventWithModifiers, InputEventFromWindow);
|
GDCLASS(InputEventWithModifiers, InputEventFromWindow);
|
||||||
|
|
||||||
|
bool store_command = true;
|
||||||
|
|
||||||
bool shift = false;
|
bool shift = false;
|
||||||
bool alt = false;
|
bool alt = false;
|
||||||
#ifdef APPLE_STYLE_KEYS
|
#ifdef APPLE_STYLE_KEYS
|
||||||
|
@ -228,8 +230,12 @@ class InputEventWithModifiers : public InputEventFromWindow {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
virtual void _validate_property(PropertyInfo &property) const override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void set_store_command(bool p_enabled);
|
||||||
|
bool is_storing_command() const;
|
||||||
|
|
||||||
void set_shift(bool p_enabled);
|
void set_shift(bool p_enabled);
|
||||||
bool get_shift() const;
|
bool get_shift() const;
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
<member name="shift" type="bool" setter="set_shift" getter="get_shift" default="false">
|
<member name="shift" type="bool" setter="set_shift" getter="get_shift" default="false">
|
||||||
State of the [kbd]Shift[/kbd] modifier.
|
State of the [kbd]Shift[/kbd] modifier.
|
||||||
</member>
|
</member>
|
||||||
|
<member name="store_command" type="bool" setter="set_store_command" getter="is_storing_command" default="true">
|
||||||
|
If [code]true[/code], pressing [kbd]Cmd[/kbd] on macOS or [kbd]Ctrl[/kbd] on all other platforms will both be serialized as [member command]. If [code]false[/code], those same keys will be serialized as [member meta] on macOS and [member control] on all other platforms.
|
||||||
|
This aids with cross-platform compatibility when developing e.g. on Windows for macOS, or vice-versa.
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
</constants>
|
</constants>
|
||||||
|
|
Loading…
Reference in New Issue