mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-19 09:41:32 +08:00
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:
@@ -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(""));
|
||||
|
||||
Reference in New Issue
Block a user