|
@@ -808,7 +808,8 @@ static void SaveAudioDevice(const char *name, int channel, obs_data_t *parent, v
|
|
|
|
|
|
|
|
static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder, obs_data_array_t *quickTransitionData,
|
|
static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder, obs_data_array_t *quickTransitionData,
|
|
|
int transitionDuration, obs_data_array_t *transitions, OBSScene &scene,
|
|
int transitionDuration, obs_data_array_t *transitions, OBSScene &scene,
|
|
|
- OBSSource &curProgramScene, obs_data_array_t *savedProjectorList)
|
|
|
|
|
|
|
+ OBSSource &curProgramScene, obs_data_array_t *savedProjectorList,
|
|
|
|
|
+ obs_data_array_t *savedCanvases)
|
|
|
{
|
|
{
|
|
|
obs_data_t *saveData = obs_data_create();
|
|
obs_data_t *saveData = obs_data_create();
|
|
|
|
|
|
|
@@ -865,6 +866,7 @@ static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder, obs_data_array
|
|
|
obs_data_set_array(saveData, "quick_transitions", quickTransitionData);
|
|
obs_data_set_array(saveData, "quick_transitions", quickTransitionData);
|
|
|
obs_data_set_array(saveData, "transitions", transitions);
|
|
obs_data_set_array(saveData, "transitions", transitions);
|
|
|
obs_data_set_array(saveData, "saved_projectors", savedProjectorList);
|
|
obs_data_set_array(saveData, "saved_projectors", savedProjectorList);
|
|
|
|
|
+ obs_data_set_array(saveData, "canvases", savedCanvases);
|
|
|
obs_data_array_release(sourcesArray);
|
|
obs_data_array_release(sourcesArray);
|
|
|
obs_data_array_release(groupsArray);
|
|
obs_data_array_release(groupsArray);
|
|
|
|
|
|
|
@@ -885,8 +887,10 @@ void OBSBasic::Save(SceneCollection &collection)
|
|
|
OBSDataArrayAutoRelease transitions = SaveTransitions();
|
|
OBSDataArrayAutoRelease transitions = SaveTransitions();
|
|
|
OBSDataArrayAutoRelease quickTrData = SaveQuickTransitions();
|
|
OBSDataArrayAutoRelease quickTrData = SaveQuickTransitions();
|
|
|
OBSDataArrayAutoRelease savedProjectorList = SaveProjectors();
|
|
OBSDataArrayAutoRelease savedProjectorList = SaveProjectors();
|
|
|
|
|
+ OBSDataArrayAutoRelease savedCanvases = OBS::Canvas::SaveCanvases(canvases);
|
|
|
OBSDataAutoRelease saveData = GenerateSaveData(sceneOrder, quickTrData, ui->transitionDuration->value(),
|
|
OBSDataAutoRelease saveData = GenerateSaveData(sceneOrder, quickTrData, ui->transitionDuration->value(),
|
|
|
- transitions, scene, curProgramScene, savedProjectorList);
|
|
|
|
|
|
|
+ transitions, scene, curProgramScene, savedProjectorList,
|
|
|
|
|
+ savedCanvases);
|
|
|
|
|
|
|
|
obs_data_set_bool(saveData, "preview_locked", ui->preview->Locked());
|
|
obs_data_set_bool(saveData, "preview_locked", ui->preview->Locked());
|
|
|
obs_data_set_bool(saveData, "scaling_enabled", ui->preview->IsFixedScaling());
|
|
obs_data_set_bool(saveData, "scaling_enabled", ui->preview->IsFixedScaling());
|
|
@@ -1171,6 +1175,7 @@ void OBSBasic::LoadData(obs_data_t *data, SceneCollection &collection)
|
|
|
OBSDataArrayAutoRelease sources = obs_data_get_array(data, "sources");
|
|
OBSDataArrayAutoRelease sources = obs_data_get_array(data, "sources");
|
|
|
OBSDataArrayAutoRelease groups = obs_data_get_array(data, "groups");
|
|
OBSDataArrayAutoRelease groups = obs_data_get_array(data, "groups");
|
|
|
OBSDataArrayAutoRelease transitions = obs_data_get_array(data, "transitions");
|
|
OBSDataArrayAutoRelease transitions = obs_data_get_array(data, "transitions");
|
|
|
|
|
+ OBSDataArrayAutoRelease collection_canvases = obs_data_get_array(data, "canvases");
|
|
|
const char *sceneName = obs_data_get_string(data, "current_scene");
|
|
const char *sceneName = obs_data_get_string(data, "current_scene");
|
|
|
const char *programSceneName = obs_data_get_string(data, "current_program_scene");
|
|
const char *programSceneName = obs_data_get_string(data, "current_program_scene");
|
|
|
const char *transitionName = obs_data_get_string(data, "current_transition");
|
|
const char *transitionName = obs_data_get_string(data, "current_transition");
|
|
@@ -1207,6 +1212,9 @@ void OBSBasic::LoadData(obs_data_t *data, SceneCollection &collection)
|
|
|
LoadAudioDevice(AUX_AUDIO_3, 5, data);
|
|
LoadAudioDevice(AUX_AUDIO_3, 5, data);
|
|
|
LoadAudioDevice(AUX_AUDIO_4, 6, data);
|
|
LoadAudioDevice(AUX_AUDIO_4, 6, data);
|
|
|
|
|
|
|
|
|
|
+ if (collection_canvases)
|
|
|
|
|
+ canvases = OBS::Canvas::LoadCanvases(collection_canvases);
|
|
|
|
|
+
|
|
|
if (!sources) {
|
|
if (!sources) {
|
|
|
sources = std::move(groups);
|
|
sources = std::move(groups);
|
|
|
} else {
|
|
} else {
|
|
@@ -1525,6 +1533,12 @@ void OBSBasic::ClearSceneData()
|
|
|
obs_enum_scenes(cb, nullptr);
|
|
obs_enum_scenes(cb, nullptr);
|
|
|
obs_enum_sources(cb, nullptr);
|
|
obs_enum_sources(cb, nullptr);
|
|
|
|
|
|
|
|
|
|
+ for (const auto &canvas : canvases) {
|
|
|
|
|
+ obs_canvas_enum_scenes(canvas, cb, nullptr);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ canvases.clear();
|
|
|
|
|
+
|
|
|
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP);
|
|
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP);
|
|
|
|
|
|
|
|
undo_s.clear();
|
|
undo_s.clear();
|