libobs: Refactor hide/show transition functions

Having two separate functions for each hide/show transition action is
silly and makes code awful.
This commit is contained in:
jp9000
2022-03-24 22:32:41 -07:00
parent 5e2c757cd1
commit e236a16715
4 changed files with 94 additions and 83 deletions
+23 -59
View File
@@ -1095,7 +1095,7 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
void OBSBasic::on_actionShowTransitionProperties_triggered()
{
OBSSceneItem item = GetCurrentSceneItem();
OBSSource source = obs_sceneitem_get_show_transition(item);
OBSSource source = obs_sceneitem_get_transition(item, true);
if (source)
CreatePropertiesWindow(source);
@@ -1104,7 +1104,7 @@ void OBSBasic::on_actionShowTransitionProperties_triggered()
void OBSBasic::on_actionHideTransitionProperties_triggered()
{
OBSSceneItem item = GetCurrentSceneItem();
OBSSource source = obs_sceneitem_get_hide_transition(item);
OBSSource source = obs_sceneitem_get_transition(item, false);
if (source)
CreatePropertiesWindow(source);
@@ -1118,14 +1118,11 @@ QMenu *OBSBasic::CreateVisibilityTransitionMenu(bool visible)
new QMenu(QTStr(visible ? "ShowTransition" : "HideTransition"));
QAction *action;
OBSSource curTransition =
visible ? obs_sceneitem_get_show_transition(si)
: obs_sceneitem_get_hide_transition(si);
OBSSource curTransition = obs_sceneitem_get_transition(si, visible);
const char *curId = curTransition ? obs_source_get_id(curTransition)
: nullptr;
int curDuration =
(int)(visible ? obs_sceneitem_get_show_transition_duration(si)
: obs_sceneitem_get_hide_transition_duration(si));
(int)obs_sceneitem_get_transition_duration(si, visible);
if (curDuration <= 0)
curDuration = obs_frontend_get_transition_duration();
@@ -1164,18 +1161,11 @@ QMenu *OBSBasic::CreateVisibilityTransitionMenu(bool visible)
OBSDataAutoRelease oldTransitionData =
obs_sceneitem_transition_save(sceneItem, visible);
if (id.isNull() || id.isEmpty()) {
if (visible)
obs_sceneitem_set_show_transition(sceneItem,
nullptr);
else
obs_sceneitem_set_hide_transition(sceneItem,
nullptr);
obs_sceneitem_set_transition(sceneItem, visible,
nullptr);
} else {
OBSSource tr =
visible ? obs_sceneitem_get_show_transition(
sceneItem)
: obs_sceneitem_get_hide_transition(
sceneItem);
OBSSource tr = obs_sceneitem_get_transition(sceneItem,
visible);
if (!tr || strcmp(QT_TO_UTF8(id),
obs_source_get_id(tr)) != 0) {
@@ -1187,28 +1177,18 @@ QMenu *OBSBasic::CreateVisibilityTransitionMenu(bool visible)
tr = obs_source_create_private(QT_TO_UTF8(id),
QT_TO_UTF8(name),
nullptr);
if (visible)
obs_sceneitem_set_show_transition(
sceneItem, tr);
else
obs_sceneitem_set_hide_transition(
sceneItem, tr);
obs_sceneitem_set_transition(sceneItem, visible,
tr);
obs_source_release(tr);
int duration =
(int)(visible ? obs_sceneitem_get_show_transition_duration(
sceneItem)
: obs_sceneitem_get_hide_transition_duration(
sceneItem));
int duration = (int)
obs_sceneitem_get_transition_duration(
sceneItem, visible);
if (duration <= 0) {
duration =
obs_frontend_get_transition_duration();
if (visible)
obs_sceneitem_set_show_transition_duration(
sceneItem, duration);
else
obs_sceneitem_set_hide_transition_duration(
sceneItem, duration);
obs_sceneitem_set_transition_duration(
sceneItem, visible, duration);
}
}
if (obs_source_configurable(tr))
@@ -1227,31 +1207,15 @@ QMenu *OBSBasic::CreateVisibilityTransitionMenu(bool visible)
sceneItem))),
undo_redo, undo_redo, undo_data, redo_data);
};
if (visible) {
auto setDuration = [](int duration) {
OBSBasic *main = reinterpret_cast<OBSBasic *>(
App()->GetMainWindow());
auto setDuration = [visible](int duration) {
OBSBasic *main =
reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
OBSSceneItem item = main->GetCurrentSceneItem();
obs_sceneitem_set_show_transition_duration(item,
duration);
};
connect(duration,
(void (QSpinBox::*)(int)) & QSpinBox::valueChanged,
setDuration);
} else {
auto setDuration = [](int duration) {
OBSBasic *main = reinterpret_cast<OBSBasic *>(
App()->GetMainWindow());
OBSSceneItem item = main->GetCurrentSceneItem();
obs_sceneitem_set_hide_transition_duration(item,
duration);
};
connect(duration,
(void (QSpinBox::*)(int)) & QSpinBox::valueChanged,
setDuration);
}
OBSSceneItem item = main->GetCurrentSceneItem();
obs_sceneitem_set_transition_duration(item, visible, duration);
};
connect(duration, (void (QSpinBox::*)(int)) & QSpinBox::valueChanged,
setDuration);
action = menu->addAction(QT_UTF8(Str("None")));
action->setProperty("transition_id", QT_UTF8(""));