UI: Add Undo/Redo for source visibility transitions
This commit is contained in:
parent
b9a2fe7851
commit
8c49cc2831
2 changed files with 38 additions and 0 deletions
|
|
@ -1152,7 +1152,28 @@ QMenu *OBSBasic::CreateVisibilityTransitionMenu(bool visible)
|
|||
|
||||
QString id = action->property("transition_id").toString();
|
||||
OBSSceneItem sceneItem = main->GetCurrentSceneItem();
|
||||
int64_t sceneItemId = obs_sceneitem_get_id(sceneItem);
|
||||
std::string sceneName =
|
||||
obs_source_get_name(obs_scene_get_source(
|
||||
obs_sceneitem_get_scene(sceneItem)));
|
||||
|
||||
auto undo_redo = [sceneName, sceneItemId,
|
||||
visible](const std::string &data) {
|
||||
obs_source_t *source =
|
||||
obs_get_source_by_name(sceneName.c_str());
|
||||
obs_scene_t *scene = obs_scene_from_source(source);
|
||||
obs_sceneitem_t *i = obs_scene_find_sceneitem_by_id(
|
||||
scene, sceneItemId);
|
||||
if (i) {
|
||||
obs_data_t *dat =
|
||||
obs_data_create_from_json(data.c_str());
|
||||
obs_sceneitem_transition_load(i, dat, visible);
|
||||
obs_data_release(dat);
|
||||
}
|
||||
obs_source_release(source);
|
||||
};
|
||||
obs_data_t *oldTransitionData =
|
||||
obs_sceneitem_transition_save(sceneItem, visible);
|
||||
if (id.isNull() || id.isEmpty()) {
|
||||
if (visible)
|
||||
obs_sceneitem_set_show_transition(sceneItem,
|
||||
|
|
@ -1204,6 +1225,21 @@ QMenu *OBSBasic::CreateVisibilityTransitionMenu(bool visible)
|
|||
if (obs_source_configurable(tr))
|
||||
CreatePropertiesWindow(tr);
|
||||
}
|
||||
obs_data_t *newTransitionData =
|
||||
obs_sceneitem_transition_save(sceneItem, visible);
|
||||
std::string undo_data(obs_data_get_json(oldTransitionData));
|
||||
std::string redo_data(obs_data_get_json(newTransitionData));
|
||||
if (undo_data.compare(redo_data) != 0)
|
||||
main->undo_s.add_action(
|
||||
QTStr(visible ? "Undo.ShowTransition"
|
||||
: "Undo.HideTransition")
|
||||
.arg(obs_source_get_name(
|
||||
obs_sceneitem_get_source(
|
||||
sceneItem))),
|
||||
undo_redo, undo_redo, undo_data, redo_data,
|
||||
NULL);
|
||||
obs_data_release(newTransitionData);
|
||||
obs_data_release(oldTransitionData);
|
||||
};
|
||||
if (visible) {
|
||||
auto setDuration = [this](int duration) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue