mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-04 10:33:30 +00: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:
parent
5e2c757cd1
commit
e236a16715
|
@ -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(""));
|
||||
|
|
|
@ -912,8 +912,8 @@ static bool LogSceneItem(obs_scene_t *, obs_sceneitem_t *item, void *v_val)
|
|||
obs_source_enum_filters(source, LogFilter,
|
||||
(void *)(intptr_t)child_indent);
|
||||
|
||||
obs_source_t *show_tn = obs_sceneitem_get_show_transition(item);
|
||||
obs_source_t *hide_tn = obs_sceneitem_get_hide_transition(item);
|
||||
obs_source_t *show_tn = obs_sceneitem_get_transition(item, true);
|
||||
obs_source_t *hide_tn = obs_sceneitem_get_transition(item, false);
|
||||
if (show_tn)
|
||||
blog(LOG_INFO, " %s- show: '%s' (%s)", indent.c_str(),
|
||||
obs_source_get_name(show_tn), obs_source_get_id(show_tn));
|
||||
|
|
|
@ -1523,14 +1523,14 @@ static inline void duplicate_item_data(struct obs_scene_item *dst,
|
|||
obs_source_t *transition = obs_source_duplicate(
|
||||
src->show_transition,
|
||||
obs_source_get_name(src->show_transition), true);
|
||||
obs_sceneitem_set_show_transition(dst, transition);
|
||||
obs_sceneitem_set_transition(dst, true, transition);
|
||||
obs_source_release(transition);
|
||||
}
|
||||
if (src->hide_transition) {
|
||||
obs_source_t *transition = obs_source_duplicate(
|
||||
src->hide_transition,
|
||||
obs_source_get_name(src->hide_transition), true);
|
||||
obs_sceneitem_set_hide_transition(dst, transition);
|
||||
obs_sceneitem_set_transition(dst, false, transition);
|
||||
obs_source_release(transition);
|
||||
}
|
||||
dst->show_transition_duration = src->show_transition_duration;
|
||||
|
@ -2129,8 +2129,8 @@ void obs_sceneitem_remove(obs_sceneitem_t *item)
|
|||
|
||||
full_unlock(scene);
|
||||
|
||||
obs_sceneitem_set_show_transition(item, NULL);
|
||||
obs_sceneitem_set_hide_transition(item, NULL);
|
||||
obs_sceneitem_set_transition(item, true, NULL);
|
||||
obs_sceneitem_set_transition(item, false, NULL);
|
||||
|
||||
obs_sceneitem_release(item);
|
||||
}
|
||||
|
@ -3655,6 +3655,46 @@ uint32_t obs_sceneitem_get_hide_transition_duration(obs_sceneitem_t *item)
|
|||
return item->hide_transition_duration;
|
||||
}
|
||||
|
||||
void obs_sceneitem_set_transition(obs_sceneitem_t *item, bool show,
|
||||
obs_source_t *transition)
|
||||
{
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
obs_source_t **target = show ? &item->show_transition
|
||||
: &item->hide_transition;
|
||||
if (*target)
|
||||
obs_source_release(*target);
|
||||
*target = obs_source_get_ref(transition);
|
||||
}
|
||||
|
||||
obs_source_t *obs_sceneitem_get_transition(obs_sceneitem_t *item, bool show)
|
||||
{
|
||||
if (!item)
|
||||
return NULL;
|
||||
|
||||
return show ? item->show_transition : item->hide_transition;
|
||||
}
|
||||
|
||||
void obs_sceneitem_set_transition_duration(obs_sceneitem_t *item, bool show,
|
||||
uint32_t duration_ms)
|
||||
{
|
||||
if (!item)
|
||||
return;
|
||||
if (show)
|
||||
item->show_transition_duration = duration_ms;
|
||||
else
|
||||
item->hide_transition_duration = duration_ms;
|
||||
}
|
||||
|
||||
uint32_t obs_sceneitem_get_transition_duration(obs_sceneitem_t *item, bool show)
|
||||
{
|
||||
if (!item)
|
||||
return 0;
|
||||
return show ? item->show_transition_duration
|
||||
: item->hide_transition_duration;
|
||||
}
|
||||
|
||||
void obs_sceneitem_transition_stop(void *data, calldata_t *calldata)
|
||||
{
|
||||
obs_source_t *parent = data;
|
||||
|
@ -3679,16 +3719,12 @@ void obs_sceneitem_do_transition(obs_sceneitem_t *item, bool visible)
|
|||
if (transition_active(item->hide_transition))
|
||||
obs_transition_force_stop(item->hide_transition);
|
||||
|
||||
obs_source_t *transition =
|
||||
visible ? obs_sceneitem_get_show_transition(item)
|
||||
: obs_sceneitem_get_hide_transition(item);
|
||||
obs_source_t *transition = obs_sceneitem_get_transition(item, visible);
|
||||
if (!transition)
|
||||
return;
|
||||
|
||||
int duration =
|
||||
(int)(visible ? obs_sceneitem_get_show_transition_duration(item)
|
||||
: obs_sceneitem_get_hide_transition_duration(
|
||||
item));
|
||||
(int)obs_sceneitem_get_transition_duration(item, visible);
|
||||
|
||||
const int cx = obs_source_get_width(item->source);
|
||||
const int cy = obs_source_get_height(item->source);
|
||||
|
@ -3729,10 +3765,7 @@ void obs_sceneitem_transition_load(struct obs_scene_item *item,
|
|||
const char *tn = obs_data_get_string(data, "name");
|
||||
obs_data_t *s = obs_data_get_obj(data, "transition");
|
||||
obs_source_t *t = obs_source_create_private(id, tn, s);
|
||||
if (show)
|
||||
obs_sceneitem_set_show_transition(item, t);
|
||||
else
|
||||
obs_sceneitem_set_hide_transition(item, t);
|
||||
obs_sceneitem_set_transition(item, show, t);
|
||||
obs_source_release(t);
|
||||
obs_data_release(s);
|
||||
}
|
||||
|
|
30
libobs/obs.h
30
libobs/obs.h
|
@ -1859,16 +1859,30 @@ EXPORT void obs_sceneitem_set_show_transition(obs_sceneitem_t *item,
|
|||
obs_source_t *transition);
|
||||
EXPORT void obs_sceneitem_set_show_transition_duration(obs_sceneitem_t *item,
|
||||
uint32_t duration_ms);
|
||||
EXPORT obs_source_t *obs_sceneitem_get_show_transition(obs_sceneitem_t *item);
|
||||
EXPORT uint32_t
|
||||
OBS_DEPRECATED EXPORT obs_source_t *
|
||||
obs_sceneitem_get_show_transition(obs_sceneitem_t *item);
|
||||
OBS_DEPRECATED EXPORT uint32_t
|
||||
obs_sceneitem_get_show_transition_duration(obs_sceneitem_t *item);
|
||||
EXPORT void obs_sceneitem_set_hide_transition(obs_sceneitem_t *item,
|
||||
obs_source_t *transition);
|
||||
EXPORT void obs_sceneitem_set_hide_transition_duration(obs_sceneitem_t *item,
|
||||
uint32_t duration_ms);
|
||||
EXPORT obs_source_t *obs_sceneitem_get_hide_transition(obs_sceneitem_t *item);
|
||||
EXPORT uint32_t
|
||||
OBS_DEPRECATED EXPORT void
|
||||
obs_sceneitem_set_hide_transition(obs_sceneitem_t *item,
|
||||
obs_source_t *transition);
|
||||
OBS_DEPRECATED EXPORT void
|
||||
obs_sceneitem_set_hide_transition_duration(obs_sceneitem_t *item,
|
||||
uint32_t duration_ms);
|
||||
OBS_DEPRECATED EXPORT obs_source_t *
|
||||
obs_sceneitem_get_hide_transition(obs_sceneitem_t *item);
|
||||
OBS_DEPRECATED EXPORT uint32_t
|
||||
obs_sceneitem_get_hide_transition_duration(obs_sceneitem_t *item);
|
||||
|
||||
EXPORT void obs_sceneitem_set_transition(obs_sceneitem_t *item, bool show,
|
||||
obs_source_t *transition);
|
||||
EXPORT obs_source_t *obs_sceneitem_get_transition(obs_sceneitem_t *item,
|
||||
bool show);
|
||||
EXPORT void obs_sceneitem_set_transition_duration(obs_sceneitem_t *item,
|
||||
bool show,
|
||||
uint32_t duration_ms);
|
||||
EXPORT uint32_t obs_sceneitem_get_transition_duration(obs_sceneitem_t *item,
|
||||
bool show);
|
||||
EXPORT void obs_sceneitem_do_transition(obs_sceneitem_t *item, bool visible);
|
||||
EXPORT void obs_sceneitem_transition_load(struct obs_scene_item *item,
|
||||
obs_data_t *data, bool show);
|
||||
|
|
Loading…
Reference in a new issue