Adjust to SceneItemSelection rework

And do minor cleanup
This commit is contained in:
WarmUpTill
2023-07-16 20:29:21 +02:00
committed by WarmUpTill
parent a82bce947f
commit 884fb1b637
14 changed files with 107 additions and 262 deletions

View File

@@ -451,7 +451,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.hide="Verstecken"
AdvSceneSwitcher.action.sceneVisibility.type.toggle="Umschalten"
AdvSceneSwitcher.action.sceneVisibility.type.source="Quelle"
AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Beliebig"
AdvSceneSwitcher.action.sceneVisibility.entry="Auf{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}"
AdvSceneSwitcher.action.sceneVisibility.entry="Auf{{scenes}}{{actions}}{{sources}}"
AdvSceneSwitcher.action.filter="Filter"
AdvSceneSwitcher.action.filter.type.enable="Aktivieren"
AdvSceneSwitcher.action.filter.type.disable="Deaktivieren"

View File

@@ -538,7 +538,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.hide="Hide"
AdvSceneSwitcher.action.sceneVisibility.type.toggle="Toggle"
AdvSceneSwitcher.action.sceneVisibility.type.source="Source"
AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Any"
AdvSceneSwitcher.action.sceneVisibility.entry="On{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}"
AdvSceneSwitcher.action.sceneVisibility.entry="On{{scenes}}{{actions}}{{sources}}"
AdvSceneSwitcher.action.filter="Filter"
AdvSceneSwitcher.action.filter.type.enable="Enable"
AdvSceneSwitcher.action.filter.type.disable="Disable"

View File

@@ -371,7 +371,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.show="Mostrar"
AdvSceneSwitcher.action.sceneVisibility.type.hide="Ocultar"
AdvSceneSwitcher.action.sceneVisibility.type.source="Fuente"
AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Cualquiera"
AdvSceneSwitcher.action.sceneVisibility.entry="En{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}"
AdvSceneSwitcher.action.sceneVisibility.entry="En{{scenes}}{{actions}}{{sources}}"
AdvSceneSwitcher.action.filter="Filtro"
AdvSceneSwitcher.action.filter.type.enable="Habilitar"
AdvSceneSwitcher.action.filter.type.disable="Deshabilitar"

View File

@@ -301,7 +301,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.show="Göster"
AdvSceneSwitcher.action.sceneVisibility.type.hide="Gizle"
AdvSceneSwitcher.action.sceneVisibility.type.source="Kayıt"
AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Herhangi"
AdvSceneSwitcher.action.sceneVisibility.entry="Açık{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}"
AdvSceneSwitcher.action.sceneVisibility.entry="Açık{{scenes}}{{actions}}{{sources}}"
AdvSceneSwitcher.action.filter="Filtrele"
AdvSceneSwitcher.action.filter.type.enable="Etkin"
AdvSceneSwitcher.action.filter.type.disable="Etkisiz"

View File

@@ -502,7 +502,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.hide="隐藏"
AdvSceneSwitcher.action.sceneVisibility.type.toggle="切换"
AdvSceneSwitcher.action.sceneVisibility.type.source="来源"
AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="全部"
AdvSceneSwitcher.action.sceneVisibility.entry="置{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}"
AdvSceneSwitcher.action.sceneVisibility.entry="置{{scenes}}{{actions}}{{sources}}"
AdvSceneSwitcher.action.filter="滤镜"
AdvSceneSwitcher.action.filter.type.enable="开启"
AdvSceneSwitcher.action.filter.type.disable="关闭"

View File

@@ -39,9 +39,8 @@ bool MacroActionSceneLock::PerformAction()
{
auto items = _source.GetSceneItems(_scene);
for (auto item : items) {
for (const auto &item : items) {
setSceneItemLock(item, _action);
obs_sceneitem_release(item);
}
return true;
@@ -160,6 +159,8 @@ void MacroActionSceneLockEdit::SourceChanged(const SceneItemSelection &item)
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroActionSceneLockEdit::ActionChanged(int value)

View File

@@ -23,7 +23,7 @@ const static std::map<SceneOrderAction, std::string> actionTypes = {
"AdvSceneSwitcher.action.sceneOrder.type.movePosition"},
};
static void moveSceneItemsUp(std::vector<obs_scene_item *> &items)
static void moveSceneItemsUp(std::vector<OBSSceneItem> &items)
{
// In the case of the same source being in two sequential positions
// moving the sources up will cause the sources to swap positions due to
@@ -33,41 +33,36 @@ static void moveSceneItemsUp(std::vector<obs_scene_item *> &items)
// will be moved up.
std::reverse(items.begin(), items.end());
for (auto &i : items) {
for (const auto &i : items) {
obs_sceneitem_set_order(i, OBS_ORDER_MOVE_UP);
obs_sceneitem_release(i);
}
}
static void moveSceneItemsDown(std::vector<obs_scene_item *> &items)
static void moveSceneItemsDown(std::vector<OBSSceneItem> &items)
{
for (auto &i : items) {
for (const auto &i : items) {
obs_sceneitem_set_order(i, OBS_ORDER_MOVE_DOWN);
obs_sceneitem_release(i);
}
}
static void moveSceneItemsTop(std::vector<obs_scene_item *> &items)
static void moveSceneItemsTop(std::vector<OBSSceneItem> &items)
{
for (auto &i : items) {
for (const auto &i : items) {
obs_sceneitem_set_order(i, OBS_ORDER_MOVE_TOP);
obs_sceneitem_release(i);
}
}
static void moveSceneItemsBottom(std::vector<obs_scene_item *> &items)
static void moveSceneItemsBottom(std::vector<OBSSceneItem> &items)
{
for (auto &i : items) {
for (const auto &i : items) {
obs_sceneitem_set_order(i, OBS_ORDER_MOVE_BOTTOM);
obs_sceneitem_release(i);
}
}
static void moveSceneItemsPos(std::vector<obs_scene_item *> &items, int pos)
static void moveSceneItemsPos(std::vector<OBSSceneItem> &items, int pos)
{
for (auto &i : items) {
for (const auto &i : items) {
obs_sceneitem_set_order_position(i, pos);
obs_sceneitem_release(i);
}
}
@@ -149,7 +144,7 @@ std::string MacroActionSceneOrder::GetShortDesc() const
static inline void populateActionSelection(QComboBox *list)
{
for (auto entry : actionTypes) {
for (const auto &entry : actionTypes) {
list->addItem(obs_module_text(entry.second.c_str()));
}
}
@@ -228,6 +223,8 @@ void MacroActionSceneOrderEdit::SourceChanged(const SceneItemSelection &item)
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroActionSceneOrderEdit::ActionChanged(int value)

View File

@@ -235,6 +235,7 @@ void MacroActionSceneTransform::Transform(obs_scene_item *item)
center(item, CenterType::HORIZONTAL);
break;
case MacroActionSceneTransform::Action::MANUAL_TRANSFORM:
ApplySettings(_settings); // Resolves variables
obs_sceneitem_defer_update_begin(item);
obs_sceneitem_set_info(item, &_info);
obs_sceneitem_set_crop(item, &_crop);
@@ -245,12 +246,9 @@ void MacroActionSceneTransform::Transform(obs_scene_item *item)
bool MacroActionSceneTransform::PerformAction()
{
ApplySettings(_settings); // Resolves variables
auto items = _source.GetSceneItems(_scene);
for (auto &item : items) {
for (const auto &item : items) {
Transform(item);
obs_sceneitem_release(item);
}
return true;
}
@@ -345,9 +343,6 @@ void MacroActionSceneTransform::ApplySettings(const std::string &settings)
}
obs_data_release(obj);
}
for (auto item : items) {
obs_sceneitem_release(item);
}
obs_data_release(data);
}
@@ -455,6 +450,8 @@ void MacroActionSceneTransformEdit::SourceChanged(const SceneItemSelection &item
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroActionSceneTransformEdit::ActionChanged(int idx)
@@ -492,9 +489,6 @@ void MacroActionSceneTransformEdit::GetSettingsClicked()
auto settings = GetSceneItemTransform(items[0]);
_settings->setPlainText(FormatJsonString(settings));
for (auto item : items) {
obs_sceneitem_release(item);
}
}
void MacroActionSceneTransformEdit::SettingsChanged()

View File

@@ -11,85 +11,38 @@ bool MacroActionSceneVisibility::_registered = MacroActionFactory::Register(
MacroActionSceneVisibilityEdit::Create,
"AdvSceneSwitcher.action.sceneVisibility"});
const static std::map<SceneVisibilityAction, std::string> actionTypes = {
{SceneVisibilityAction::SHOW,
"AdvSceneSwitcher.action.sceneVisibility.type.show"},
{SceneVisibilityAction::HIDE,
"AdvSceneSwitcher.action.sceneVisibility.type.hide"},
{SceneVisibilityAction::TOGGLE,
"AdvSceneSwitcher.action.sceneVisibility.type.toggle"},
};
const static std::map<SceneItemSourceType, std::string> sourceItemSourceTypes = {
{SceneItemSourceType::SOURCE,
"AdvSceneSwitcher.action.sceneVisibility.type.source"},
{SceneItemSourceType::SOURCE_GROUP,
"AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup"},
};
struct VisibilityData {
std::string name;
SceneVisibilityAction action;
const static std::map<MacroActionSceneVisibility::Action, std::string>
actionTypes = {
{MacroActionSceneVisibility::Action::SHOW,
"AdvSceneSwitcher.action.sceneVisibility.type.show"},
{MacroActionSceneVisibility::Action::HIDE,
"AdvSceneSwitcher.action.sceneVisibility.type.hide"},
{MacroActionSceneVisibility::Action::TOGGLE,
"AdvSceneSwitcher.action.sceneVisibility.type.toggle"},
};
static void setSceneItemVisibility(obs_sceneitem_t *item,
SceneVisibilityAction action)
MacroActionSceneVisibility::Action action)
{
switch (action) {
case SceneVisibilityAction::SHOW:
case MacroActionSceneVisibility::Action::SHOW:
obs_sceneitem_set_visible(item, true);
break;
case SceneVisibilityAction::HIDE:
case MacroActionSceneVisibility::Action::HIDE:
obs_sceneitem_set_visible(item, false);
break;
case SceneVisibilityAction::TOGGLE:
case MacroActionSceneVisibility::Action::TOGGLE:
obs_sceneitem_set_visible(item, !obs_sceneitem_visible(item));
break;
}
}
static bool visibilitySourceTypeEnum(obs_scene_t *, obs_sceneitem_t *item,
void *ptr)
{
VisibilityData *vInfo = reinterpret_cast<VisibilityData *>(ptr);
auto sourceTypeName = obs_source_get_display_name(
obs_source_get_id(obs_sceneitem_get_source(item)));
if (sourceTypeName && vInfo->name == sourceTypeName) {
setSceneItemVisibility(item, vInfo->action);
}
if (obs_sceneitem_is_group(item)) {
obs_scene_t *scene = obs_sceneitem_group_get_scene(item);
obs_scene_enum_items(scene, visibilitySourceTypeEnum, ptr);
}
return true;
}
bool MacroActionSceneVisibility::PerformAction()
{
switch (_sourceType) {
case SceneItemSourceType::SOURCE: {
auto items = _source.GetSceneItems(_scene);
for (auto item : items) {
setSceneItemVisibility(item, _action);
obs_sceneitem_release(item);
}
break;
auto items = _source.GetSceneItems(_scene);
for (const auto &item : items) {
setSceneItemVisibility(item, _action);
}
case SceneItemSourceType::SOURCE_GROUP: {
auto s = obs_weak_source_get_source(_scene.GetScene());
auto scene = obs_scene_from_source(s);
VisibilityData vInfo = {_sourceGroup, _action};
obs_scene_enum_items(scene, visibilitySourceTypeEnum, &vInfo);
obs_source_release(s);
break;
}
default:
break;
}
return true;
}
@@ -97,18 +50,11 @@ void MacroActionSceneVisibility::LogAction() const
{
auto it = actionTypes.find(_action);
if (it != actionTypes.end()) {
if (_sourceType == SceneItemSourceType::SOURCE) {
vblog(LOG_INFO,
"performed visibility action \"%s\" for source \"%s\" on scene \"%s\"",
it->second.c_str(),
_source.ToString(true).c_str(),
_scene.ToString(true).c_str());
} else {
vblog(LOG_INFO,
"performed visibility action \"%s\" for any source type \"%s\" on scene \"%s\"",
it->second.c_str(), _sourceGroup.c_str(),
_scene.ToString(true).c_str());
}
vblog(LOG_INFO,
"performed visibility action \"%s\" for source \"%s\" on scene \"%s\"",
it->second.c_str(), _source.ToString(true).c_str(),
_scene.ToString(true).c_str());
} else {
blog(LOG_WARNING, "ignored unknown SceneVisibility action %d",
static_cast<int>(_action));
@@ -119,13 +65,8 @@ bool MacroActionSceneVisibility::Save(obs_data_t *obj) const
{
MacroAction::Save(obj);
_scene.Save(obj);
if (_sourceType == SceneItemSourceType::SOURCE) {
_source.Save(obj);
} else {
obs_data_set_string(obj, "sourceGroup", _sourceGroup.c_str());
}
_source.Save(obj);
obs_data_set_int(obj, "action", static_cast<int>(_action));
obs_data_set_int(obj, "sourceType", static_cast<int>(_sourceType));
return true;
}
@@ -136,89 +77,64 @@ bool MacroActionSceneVisibility::Load(obs_data_t *obj)
if (obs_data_has_user_value(obj, "source")) {
auto sourceName = obs_data_get_string(obj, "source");
obs_data_set_string(obj, "sceneItem", sourceName);
obs_data_set_string(obj, "sourceGroup", sourceName);
}
MacroAction::Load(obj);
_scene.Load(obj);
_source.Load(obj);
_sourceType = static_cast<SceneItemSourceType>(
obs_data_get_int(obj, "sourceType"));
_sourceGroup = obs_data_get_string(obj, "sourceGroup");
_action = static_cast<SceneVisibilityAction>(
_action = static_cast<MacroActionSceneVisibility::Action>(
obs_data_get_int(obj, "action"));
// TODO: Remove in future version
if (obs_data_get_int(obj, "sourceType") != 0) {
auto sourceGroup = obs_data_get_string(obj, "sourceGroup");
_source.SetSourceTypeSelection(sourceGroup);
}
return true;
}
std::string MacroActionSceneVisibility::GetShortDesc() const
{
if (_sourceType == SceneItemSourceType::SOURCE &&
!_source.ToString().empty()) {
if (!_source.ToString().empty()) {
return _scene.ToString() + " - " + _source.ToString();
}
if (_sourceType == SceneItemSourceType::SOURCE_GROUP &&
!_sourceGroup.empty()) {
return _scene.ToString() + " - " +
obs_module_text(
"AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup") +
" " + _sourceGroup;
}
return "";
}
static inline void populateActionSelection(QComboBox *list)
{
for (auto entry : actionTypes) {
list->addItem(obs_module_text(entry.second.c_str()));
}
}
static inline void populateSourceItemTypeSelection(QComboBox *list)
{
for (auto entry : sourceItemSourceTypes) {
for (const auto &entry : actionTypes) {
list->addItem(obs_module_text(entry.second.c_str()));
}
}
MacroActionSceneVisibilityEdit::MacroActionSceneVisibilityEdit(
QWidget *parent, std::shared_ptr<MacroActionSceneVisibility> entryData)
: QWidget(parent)
: QWidget(parent),
_scenes(new SceneSelectionWidget(window(), true, false, true, true)),
_sources(new SceneItemSelectionWidget(parent)),
_actions(new QComboBox())
{
_scenes = new SceneSelectionWidget(window(), true, false, true, true);
_sourceTypes = new QComboBox();
_sources = new SceneItemSelectionWidget(parent);
_sourceGroups = new QComboBox();
_actions = new QComboBox();
populateSourceItemTypeSelection(_sourceTypes);
PopulateSourceGroupSelection(_sourceGroups);
populateActionSelection(_actions);
QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this,
SLOT(ActionChanged(int)));
QWidget::connect(_scenes, SIGNAL(SceneChanged(const SceneSelection &)),
this, SLOT(SceneChanged(const SceneSelection &)));
QWidget::connect(_sourceTypes, SIGNAL(currentIndexChanged(int)), this,
SLOT(SourceTypeChanged(int)));
QWidget::connect(_scenes, SIGNAL(SceneChanged(const SceneSelection &)),
_sources, SLOT(SceneChanged(const SceneSelection &)));
QWidget::connect(_sources,
SIGNAL(SceneItemChanged(const SceneItemSelection &)),
this, SLOT(SourceChanged(const SceneItemSelection &)));
QWidget::connect(_sourceGroups,
SIGNAL(currentTextChanged(const QString &)), this,
SLOT(SourceGroupChanged(const QString &)));
QHBoxLayout *mainLayout = new QHBoxLayout;
std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
{"{{scenes}}", _scenes}, {"{{sourceTypes}}", _sourceTypes},
{"{{sources}}", _sources}, {"{{sourceGroups}}", _sourceGroups},
{"{{actions}}", _actions},
};
auto layout = new QHBoxLayout;
PlaceWidgets(obs_module_text(
"AdvSceneSwitcher.action.sceneVisibility.entry"),
mainLayout, widgetPlaceholders);
setLayout(mainLayout);
layout,
{{"{{scenes}}", _scenes},
{"{{sources}}", _sources},
{"{{actions}}", _actions}});
setLayout(layout);
_entryData = entryData;
UpdateEntryData();
@@ -232,13 +148,8 @@ void MacroActionSceneVisibilityEdit::UpdateEntryData()
}
_actions->setCurrentIndex(static_cast<int>(_entryData->_action));
_sourceTypes->setCurrentIndex(
static_cast<int>(_entryData->_sourceType));
_scenes->SetScene(_entryData->_scene);
_sources->SetSceneItem((_entryData->_source));
_sourceGroups->setCurrentText(
QString::fromStdString(_entryData->_sourceGroup));
SetWidgetVisibility();
}
void MacroActionSceneVisibilityEdit::SceneChanged(const SceneSelection &s)
@@ -251,17 +162,6 @@ void MacroActionSceneVisibilityEdit::SceneChanged(const SceneSelection &s)
_entryData->_scene = s;
}
void MacroActionSceneVisibilityEdit::SourceTypeChanged(int value)
{
if (_loading || !_entryData) {
return;
}
auto lock = LockContext();
_entryData->_sourceType = static_cast<SceneItemSourceType>(value);
SetWidgetVisibility();
}
void MacroActionSceneVisibilityEdit::SourceChanged(
const SceneItemSelection &item)
{
@@ -273,22 +173,8 @@ void MacroActionSceneVisibilityEdit::SourceChanged(
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
}
void MacroActionSceneVisibilityEdit::SourceGroupChanged(const QString &text)
{
if (_loading || !_entryData) {
return;
}
auto lock = LockContext();
if (text == obs_module_text("AdvSceneSwitcher.selectItem")) {
_entryData->_sourceGroup = "";
} else {
_entryData->_sourceGroup = text.toStdString();
}
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroActionSceneVisibilityEdit::ActionChanged(int value)
@@ -298,19 +184,8 @@ void MacroActionSceneVisibilityEdit::ActionChanged(int value)
}
auto lock = LockContext();
_entryData->_action = static_cast<SceneVisibilityAction>(value);
}
void MacroActionSceneVisibilityEdit::SetWidgetVisibility()
{
if (!_entryData) {
return;
}
_sources->setVisible(_entryData->_sourceType ==
SceneItemSourceType::SOURCE);
_sourceGroups->setVisible(_entryData->_sourceType ==
SceneItemSourceType::SOURCE_GROUP);
adjustSize();
_entryData->_action =
static_cast<MacroActionSceneVisibility::Action>(value);
}
} // namespace advss

View File

@@ -7,17 +7,6 @@
namespace advss {
enum class SceneVisibilityAction {
SHOW,
HIDE,
TOGGLE,
};
enum class SceneItemSourceType {
SOURCE,
SOURCE_GROUP,
};
class MacroActionSceneVisibility : public MacroAction {
public:
MacroActionSceneVisibility(Macro *m) : MacroAction(m) {}
@@ -33,10 +22,14 @@ public:
}
SceneSelection _scene;
SceneItemSourceType _sourceType = SceneItemSourceType::SOURCE;
SceneItemSelection _source;
std::string _sourceGroup = "";
SceneVisibilityAction _action = SceneVisibilityAction::SHOW;
enum class Action {
SHOW,
HIDE,
TOGGLE,
};
Action _action = Action::SHOW;
private:
static bool _registered;
@@ -62,25 +55,18 @@ public:
private slots:
void SceneChanged(const SceneSelection &);
void SourceTypeChanged(int value);
void SourceChanged(const SceneItemSelection &);
void SourceGroupChanged(const QString &text);
void ActionChanged(int value);
signals:
void HeaderInfoChanged(const QString &);
protected:
SceneSelectionWidget *_scenes;
QComboBox *_sourceTypes;
SceneItemSelectionWidget *_sources;
QComboBox *_sourceGroups;
QComboBox *_actions;
std::shared_ptr<MacroActionSceneVisibility> _entryData;
private:
void SetWidgetVisibility();
QHBoxLayout *_mainLayout;
bool _loading = true;
};

View File

@@ -88,7 +88,7 @@ void MacroActionTransition::SetSourceTransition(bool show)
obs_source_release(transition);
const auto items = _source.GetSceneItems(_scene);
for (auto &item : items) {
for (const auto &item : items) {
if (_setTransitionType) {
obs_sceneitem_set_transition(item, show, t);
}
@@ -96,7 +96,6 @@ void MacroActionTransition::SetSourceTransition(bool show)
obs_sceneitem_set_transition_duration(
item, show, _duration.Milliseconds());
}
obs_sceneitem_release(item);
}
obs_source_release(t);
@@ -200,7 +199,7 @@ std::string MacroActionTransition::GetShortDesc() const
static inline void populateActionSelection(QComboBox *list)
{
for (auto entry : actionTypes) {
for (const auto &entry : actionTypes) {
list->addItem(obs_module_text(entry.second.c_str()));
}
}
@@ -298,6 +297,8 @@ void MacroActionTransitionEdit::SourceChanged(const SceneItemSelection &item)
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroActionTransitionEdit::ActionChanged(int value)

View File

@@ -29,16 +29,16 @@ struct PosInfo2 {
static bool getSceneItemPositionHelper(obs_scene_t *, obs_sceneitem_t *item,
void *ptr)
{
PosInfo2 *posInfo = reinterpret_cast<PosInfo2 *>(ptr);
auto posInfo = reinterpret_cast<PosInfo2 *>(ptr);
if (obs_sceneitem_is_group(item)) {
obs_scene_t *scene = obs_sceneitem_group_get_scene(item);
obs_scene_enum_items(scene, getSceneItemPositionHelper, ptr);
}
if (posInfo->item == item) {
posInfo->pos = posInfo->curPos;
return false;
}
if (obs_sceneitem_is_group(item)) {
obs_scene_t *scene = obs_sceneitem_group_get_scene(item);
obs_scene_enum_items(scene, getSceneItemPositionHelper, ptr);
}
posInfo->curPos += 1;
return true;
}
@@ -50,11 +50,11 @@ static PosInfo2 getSceneItemPos(obs_scene_item *item, obs_scene *scene)
return pos;
}
std::vector<int> getSceneItemPositions(std::vector<obs_scene_item *> &items,
obs_scene *scene)
static std::vector<int> getSceneItemPositions(std::vector<OBSSceneItem> &items,
obs_scene *scene)
{
std::vector<int> positions;
for (auto item : items) {
for (const auto &item : items) {
auto pos = getSceneItemPos(item, scene);
if (pos.pos != -1) {
positions.emplace_back(pos.pos);
@@ -106,13 +106,6 @@ bool MacroConditionSceneOrder::CheckCondition()
auto positions1 = getSceneItemPositions(items1, scene);
auto positions2 = getSceneItemPositions(items2, scene);
for (auto i : items1) {
obs_sceneitem_release(i);
}
for (auto i : items2) {
obs_sceneitem_release(i);
}
bool ret = false;
switch (_condition) {
@@ -124,8 +117,9 @@ bool MacroConditionSceneOrder::CheckCondition()
break;
case Condition::POSITION:
for (int p : positions1) {
if (p == _position)
if (p == _position) {
ret = true;
}
}
break;
default:
@@ -195,7 +189,7 @@ std::string MacroConditionSceneOrder::GetShortDesc() const
static inline void populateConditionSelection(QComboBox *list)
{
for (auto entry : sceneOrderConditionTypes) {
for (const auto &entry : sceneOrderConditionTypes) {
list->addItem(obs_module_text(entry.second.c_str()));
}
}
@@ -282,6 +276,8 @@ void MacroConditionSceneOrderEdit::SourceChanged(const SceneItemSelection &item)
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroConditionSceneOrderEdit::Source2Changed(const SceneItemSelection &item)
@@ -294,6 +290,8 @@ void MacroConditionSceneOrderEdit::Source2Changed(const SceneItemSelection &item
_entryData->_source2 = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroConditionSceneOrderEdit::ConditionChanged(int index)

View File

@@ -18,12 +18,11 @@ bool MacroConditionSceneTransform::CheckCondition()
auto items = _source.GetSceneItems(_scene);
std::string json;
for (auto &item : items) {
for (const auto &item : items) {
json = GetSceneItemTransform(item);
if (MatchJson(json, _settings, _regex)) {
ret = true;
}
obs_sceneitem_release(item);
}
SetVariableValue(json);
return ret;
@@ -165,6 +164,8 @@ void MacroConditionSceneTransformEdit::SourceChanged(
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroConditionSceneTransformEdit::GetSettingsClicked()
@@ -184,10 +185,6 @@ void MacroConditionSceneTransformEdit::GetSettingsClicked()
settings = EscapeForRegex(settings);
}
_settings->setPlainText(settings);
for (auto item : items) {
obs_sceneitem_release(item);
}
}
void MacroConditionSceneTransformEdit::SettingsChanged()

View File

@@ -24,32 +24,30 @@ const static std::map<MacroConditionSceneVisibility::Condition, std::string>
"AdvSceneSwitcher.condition.sceneVisibility.type.changed"},
};
static bool areAllSceneItemsShown(const std::vector<obs_scene_item *> &items)
static bool areAllSceneItemsShown(const std::vector<OBSSceneItem> &items)
{
bool ret = true;
for (auto item : items) {
for (const auto &item : items) {
if (!obs_sceneitem_visible(item)) {
ret = false;
}
obs_sceneitem_release(item);
}
return ret;
}
static bool areAllSceneItemsHidden(const std::vector<obs_scene_item *> &items)
static bool areAllSceneItemsHidden(const std::vector<OBSSceneItem> &items)
{
bool ret = true;
for (auto item : items) {
for (const auto &item : items) {
if (obs_sceneitem_visible(item)) {
ret = false;
}
obs_sceneitem_release(item);
}
return ret;
}
static bool
didVisibilityOfAnySceneItemsChange(const std::vector<obs_scene_item *> &items,
didVisibilityOfAnySceneItemsChange(const std::vector<OBSSceneItem> &items,
std::vector<bool> &previousVisibility)
{
std::vector<bool> currentVisibility;
@@ -64,10 +62,6 @@ didVisibilityOfAnySceneItemsChange(const std::vector<obs_scene_item *> &items,
ret = previousVisibility != currentVisibility;
}
previousVisibility = currentVisibility;
for (const auto &item : items) {
obs_sceneitem_release(item);
}
return ret;
}
@@ -86,10 +80,10 @@ bool MacroConditionSceneVisibility::CheckCondition()
case Condition::CHANGED:
return didVisibilityOfAnySceneItemsChange(items,
_previousVisibilty);
break;
default:
break;
}
return false;
}
@@ -129,7 +123,7 @@ std::string MacroConditionSceneVisibility::GetShortDesc() const
static inline void populateConditionSelection(QComboBox *list)
{
for (auto entry : conditionTypes) {
for (const auto &entry : conditionTypes) {
list->addItem(obs_module_text(entry.second.c_str()));
}
}
@@ -183,6 +177,8 @@ void MacroConditionSceneVisibilityEdit::SourceChanged(
_entryData->_source = item;
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
adjustSize();
updateGeometry();
}
void MacroConditionSceneVisibilityEdit::SceneChanged(const SceneSelection &s)