Skip to content

Commit

Permalink
Merge pull request #43662 from EricEzaM/PR/INP3-command_serialization…
Browse files Browse the repository at this point in the history
…_optional

Made serialization of Command toggleable when saving InputEvents.
  • Loading branch information
akien-mga authored Nov 19, 2020
2 parents 8cc01be + c92f83d commit b4f81e7
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
34 changes: 34 additions & 0 deletions core/input/input_event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,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) {
shift = p_enabled;
}
Expand Down Expand Up @@ -191,6 +199,9 @@ void InputEventWithModifiers::set_modifiers_from_event(const InputEventWithModif
}

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("get_alt"), &InputEventWithModifiers::get_alt);

Expand All @@ -206,13 +217,36 @@ void InputEventWithModifiers::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_command", "enable"), &InputEventWithModifiers::set_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, "shift"), "set_shift", "get_shift");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "control"), "set_control", "get_control");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "meta"), "set_metakey", "get_metakey");
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) {
Expand Down
6 changes: 6 additions & 0 deletions core/input/input_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,8 @@ class InputEventFromWindow : public InputEvent {
class InputEventWithModifiers : public InputEventFromWindow {
GDCLASS(InputEventWithModifiers, InputEventFromWindow);

bool store_command = true;

bool shift = false;
bool alt = false;
#ifdef APPLE_STYLE_KEYS
Expand All @@ -227,8 +229,12 @@ class InputEventWithModifiers : public InputEventFromWindow {

protected:
static void _bind_methods();
virtual void _validate_property(PropertyInfo &property) const override;

public:
void set_store_command(bool p_enabled);
bool is_storing_command() const;

void set_shift(bool p_enabled);
bool get_shift() const;

Expand Down
4 changes: 4 additions & 0 deletions doc/classes/InputEventWithModifiers.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
<member name="shift" type="bool" setter="set_shift" getter="get_shift" default="false">
State of the [kbd]Shift[/kbd] modifier.
</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>
<constants>
</constants>
Expand Down

0 comments on commit b4f81e7

Please sign in to comment.