#include "source-interact.hpp" #include "obs-module-helper.hpp" #include "layout-helpers.hpp" #include #include namespace advss { void Position::Save(obs_data_t *obj, const char *name) const { OBSDataAutoRelease data = obs_data_create(); x.Save(data, "x"); y.Save(data, "y"); obs_data_set_obj(obj, name, data); } void Position::Load(obs_data_t *obj, const char *name) { OBSDataAutoRelease data = obs_data_get_obj(obj, name); x.Load(data, "x"); y.Load(data, "y"); } void Modifier::Save(obs_data_t *obj, const char *name) const { OBSDataAutoRelease data = obs_data_create(); obs_data_set_bool(data, "shift", _shift); obs_data_set_bool(data, "ctrl", _ctrl); obs_data_set_bool(data, "alt", _alt); obs_data_set_bool(data, "meta", _meta); obs_data_set_obj(obj, name, data); } void Modifier::Load(obs_data_t *obj, const char *name) { OBSDataAutoRelease data = obs_data_get_obj(obj, name); _shift = obs_data_get_bool(data, "shift"); _ctrl = obs_data_get_bool(data, "ctrl"); _alt = obs_data_get_bool(data, "alt"); _meta = obs_data_get_bool(data, "meta"); } uint32_t Modifier::GetModifiers() const { uint32_t modifiers = INTERACT_NONE; if (_shift) { modifiers |= INTERACT_SHIFT_KEY; } if (_ctrl) { modifiers |= INTERACT_CONTROL_KEY; } if (_alt) { modifiers |= INTERACT_ALT_KEY; } if (_alt) { modifiers |= INTERACT_COMMAND_KEY; } return modifiers; } SourceInteraction::SourceInteraction() { _interaction = std::make_unique(); } SourceInteraction::SourceInteraction(const SourceInteraction &other) { OBSDataAutoRelease data = obs_data_create(); other.Save(data); Load(data); } void SourceInteraction::Save(obs_data_t *obj, const char *name) const { OBSDataAutoRelease data = obs_data_create(); obs_data_set_int(data, "type", static_cast(_type)); _interaction->Save(data, "settings"); obs_data_set_obj(obj, name, data); } void SourceInteraction::Load(obs_data_t *obj, const char *name) { OBSDataAutoRelease data = obs_data_get_obj(obj, name); _type = static_cast(obs_data_get_int(data, "type")); UpdateType(); _interaction->Load(data, "settings"); } void SourceInteraction::SetSettings(SourceInteractionInstance *value) { _interaction.reset(value); } void SourceInteraction::SetType(Type t) { _type = t; UpdateType(); } void SourceInteraction::SendToSource(obs_source_t *source) const { _interaction->SendToSource(source); } void SourceInteraction::UpdateType() { switch (_type) { case SourceInteraction::Type::CLICK: _interaction.reset(new MouseClick); break; case SourceInteraction::Type::MOVE: _interaction.reset(new MouseMove); break; case SourceInteraction::Type::WHEEL: _interaction.reset(new MouseWheel); break; case SourceInteraction::Type::KEY: _interaction.reset(new KeyPress); break; } } void MouseClick::Save(obs_data_t *obj, const char *name) const { OBSDataAutoRelease data = obs_data_create(); obs_data_set_int(data, "button", static_cast(_button)); obs_data_set_bool(data, "up", _up); _pos.Save(data); _count.Save(data, "count"); _modifier.Save(data); obs_data_set_obj(obj, name, data); } void MouseClick::Load(obs_data_t *obj, const char *name) { OBSDataAutoRelease data = obs_data_get_obj(obj, name); _button = static_cast