|
@@ -137,11 +137,6 @@ OBSBasic::OBSBasic(QWidget *parent)
|
|
{
|
|
{
|
|
setAttribute(Qt::WA_NativeWindow);
|
|
setAttribute(Qt::WA_NativeWindow);
|
|
|
|
|
|
- projectorArray.resize(10, "");
|
|
|
|
- previewProjectorArray.resize(10, 0);
|
|
|
|
- multiviewProjectorArray.resize(10, 0);
|
|
|
|
- studioProgramProjectorArray.resize(10, 0);
|
|
|
|
-
|
|
|
|
setAcceptDrops(true);
|
|
setAcceptDrops(true);
|
|
|
|
|
|
ui->setupUi(this);
|
|
ui->setupUi(this);
|
|
@@ -319,10 +314,7 @@ static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder,
|
|
obs_data_array_t *quickTransitionData, int transitionDuration,
|
|
obs_data_array_t *quickTransitionData, int transitionDuration,
|
|
obs_data_array_t *transitions,
|
|
obs_data_array_t *transitions,
|
|
OBSScene &scene, OBSSource &curProgramScene,
|
|
OBSScene &scene, OBSSource &curProgramScene,
|
|
- obs_data_array_t *savedProjectorList,
|
|
|
|
- obs_data_array_t *savedPreviewProjectorList,
|
|
|
|
- obs_data_array_t *savedStudioProgramProjectorList,
|
|
|
|
- obs_data_array_t *savedMultiviewProjectorList)
|
|
|
|
|
|
+ obs_data_array_t *savedProjectorList)
|
|
{
|
|
{
|
|
obs_data_t *saveData = obs_data_create();
|
|
obs_data_t *saveData = obs_data_create();
|
|
|
|
|
|
@@ -364,12 +356,6 @@ static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder,
|
|
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, "saved_preview_projectors",
|
|
|
|
- savedPreviewProjectorList);
|
|
|
|
- obs_data_set_array(saveData, "saved_studio_preview_projectors",
|
|
|
|
- savedStudioProgramProjectorList);
|
|
|
|
- obs_data_set_array(saveData, "saved_multiview_projectors",
|
|
|
|
- savedMultiviewProjectorList);
|
|
|
|
obs_data_array_release(sourcesArray);
|
|
obs_data_array_release(sourcesArray);
|
|
|
|
|
|
obs_data_set_string(saveData, "current_transition",
|
|
obs_data_set_string(saveData, "current_transition",
|
|
@@ -439,62 +425,41 @@ obs_data_array_t *OBSBasic::SaveSceneListOrder()
|
|
|
|
|
|
obs_data_array_t *OBSBasic::SaveProjectors()
|
|
obs_data_array_t *OBSBasic::SaveProjectors()
|
|
{
|
|
{
|
|
- obs_data_array_t *saveProjector = obs_data_array_create();
|
|
|
|
-
|
|
|
|
- for (size_t i = 0; i < projectorArray.size(); i++) {
|
|
|
|
- obs_data_t *data = obs_data_create();
|
|
|
|
- obs_data_set_string(data, "saved_projectors",
|
|
|
|
- projectorArray.at(i).c_str());
|
|
|
|
- obs_data_array_push_back(saveProjector, data);
|
|
|
|
- obs_data_release(data);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return saveProjector;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-obs_data_array_t *OBSBasic::SavePreviewProjectors()
|
|
|
|
-{
|
|
|
|
- obs_data_array_t *saveProjector = obs_data_array_create();
|
|
|
|
-
|
|
|
|
- for (size_t i = 0; i < previewProjectorArray.size(); i++) {
|
|
|
|
- obs_data_t *data = obs_data_create();
|
|
|
|
- obs_data_set_int(data, "saved_preview_projectors",
|
|
|
|
- previewProjectorArray.at(i));
|
|
|
|
- obs_data_array_push_back(saveProjector, data);
|
|
|
|
- obs_data_release(data);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return saveProjector;
|
|
|
|
-}
|
|
|
|
|
|
+ obs_data_array_t *savedProjectors = obs_data_array_create();
|
|
|
|
|
|
-obs_data_array_t *OBSBasic::SaveStudioProgramProjectors()
|
|
|
|
-{
|
|
|
|
- obs_data_array_t *saveProjector = obs_data_array_create();
|
|
|
|
|
|
+ auto saveProjector = [savedProjectors](OBSProjector *projector) {
|
|
|
|
+ if (!projector)
|
|
|
|
+ return;
|
|
|
|
|
|
- for (size_t i = 0; i < studioProgramProjectorArray.size(); i++) {
|
|
|
|
obs_data_t *data = obs_data_create();
|
|
obs_data_t *data = obs_data_create();
|
|
- obs_data_set_int(data, "saved_studio_preview_projectors",
|
|
|
|
- studioProgramProjectorArray.at(i));
|
|
|
|
- obs_data_array_push_back(saveProjector, data);
|
|
|
|
|
|
+ ProjectorType type = projector->GetProjectorType();
|
|
|
|
+ switch (type) {
|
|
|
|
+ case ProjectorType::Scene:
|
|
|
|
+ case ProjectorType::Source: {
|
|
|
|
+ obs_source_t *source = projector->GetSource();
|
|
|
|
+ const char *name = obs_source_get_name(source);
|
|
|
|
+ obs_data_set_string(data, "name", name);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ obs_data_set_int(data, "monitor", projector->GetMonitor());
|
|
|
|
+ obs_data_set_int(data, "type", static_cast<int>(type));
|
|
|
|
+ obs_data_set_string(data, "geometry",
|
|
|
|
+ projector->saveGeometry().toBase64()
|
|
|
|
+ .constData());
|
|
|
|
+ obs_data_array_push_back(savedProjectors, data);
|
|
obs_data_release(data);
|
|
obs_data_release(data);
|
|
- }
|
|
|
|
-
|
|
|
|
- return saveProjector;
|
|
|
|
-}
|
|
|
|
|
|
+ };
|
|
|
|
|
|
-obs_data_array_t *OBSBasic::SaveMultiviewProjectors()
|
|
|
|
-{
|
|
|
|
- obs_data_array_t *saveProjector = obs_data_array_create();
|
|
|
|
|
|
+ for (QPointer<QWidget> &proj : projectors)
|
|
|
|
+ saveProjector(static_cast<OBSProjector *>(proj.data()));
|
|
|
|
|
|
- for (size_t i = 0; i < multiviewProjectorArray.size(); i++) {
|
|
|
|
- obs_data_t *data = obs_data_create();
|
|
|
|
- obs_data_set_int(data, "saved_multiview_projectors",
|
|
|
|
- multiviewProjectorArray.at(i));
|
|
|
|
- obs_data_array_push_back(saveProjector, data);
|
|
|
|
- obs_data_release(data);
|
|
|
|
- }
|
|
|
|
|
|
+ for (QPointer<QWidget> &proj : windowProjectors)
|
|
|
|
+ saveProjector(static_cast<OBSProjector *>(proj.data()));
|
|
|
|
|
|
- return saveProjector;
|
|
|
|
|
|
+ return savedProjectors;
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::Save(const char *file)
|
|
void OBSBasic::Save(const char *file)
|
|
@@ -508,17 +473,9 @@ void OBSBasic::Save(const char *file)
|
|
obs_data_array_t *transitions = SaveTransitions();
|
|
obs_data_array_t *transitions = SaveTransitions();
|
|
obs_data_array_t *quickTrData = SaveQuickTransitions();
|
|
obs_data_array_t *quickTrData = SaveQuickTransitions();
|
|
obs_data_array_t *savedProjectorList = SaveProjectors();
|
|
obs_data_array_t *savedProjectorList = SaveProjectors();
|
|
- obs_data_array_t *savedPreviewProjectorList = SavePreviewProjectors();
|
|
|
|
- obs_data_array_t *savedStudioProgramProjectorList =
|
|
|
|
- SaveStudioProgramProjectors();
|
|
|
|
- obs_data_array_t *savedMultiviewProjectorList =
|
|
|
|
- SaveMultiviewProjectors();
|
|
|
|
obs_data_t *saveData = GenerateSaveData(sceneOrder, quickTrData,
|
|
obs_data_t *saveData = GenerateSaveData(sceneOrder, quickTrData,
|
|
ui->transitionDuration->value(), transitions,
|
|
ui->transitionDuration->value(), transitions,
|
|
- scene, curProgramScene, savedProjectorList,
|
|
|
|
- savedPreviewProjectorList,
|
|
|
|
- savedStudioProgramProjectorList,
|
|
|
|
- savedMultiviewProjectorList);
|
|
|
|
|
|
+ scene, curProgramScene, savedProjectorList);
|
|
|
|
|
|
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",
|
|
obs_data_set_bool(saveData, "scaling_enabled",
|
|
@@ -545,9 +502,6 @@ void OBSBasic::Save(const char *file)
|
|
obs_data_array_release(quickTrData);
|
|
obs_data_array_release(quickTrData);
|
|
obs_data_array_release(transitions);
|
|
obs_data_array_release(transitions);
|
|
obs_data_array_release(savedProjectorList);
|
|
obs_data_array_release(savedProjectorList);
|
|
- obs_data_array_release(savedPreviewProjectorList);
|
|
|
|
- obs_data_array_release(savedStudioProgramProjectorList);
|
|
|
|
- obs_data_array_release(savedMultiviewProjectorList);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::DeferSaveBegin()
|
|
void OBSBasic::DeferSaveBegin()
|
|
@@ -666,47 +620,15 @@ void OBSBasic::LoadSavedProjectors(obs_data_array_t *array)
|
|
|
|
|
|
for (size_t i = 0; i < num; i++) {
|
|
for (size_t i = 0; i < num; i++) {
|
|
obs_data_t *data = obs_data_array_item(array, i);
|
|
obs_data_t *data = obs_data_array_item(array, i);
|
|
- projectorArray.at(i) = obs_data_get_string(data,
|
|
|
|
- "saved_projectors");
|
|
|
|
|
|
|
|
- obs_data_release(data);
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void OBSBasic::LoadSavedPreviewProjectors(obs_data_array_t *array)
|
|
|
|
-{
|
|
|
|
- size_t num = obs_data_array_count(array);
|
|
|
|
-
|
|
|
|
- for (size_t i = 0; i < num; i++) {
|
|
|
|
- obs_data_t *data = obs_data_array_item(array, i);
|
|
|
|
- previewProjectorArray.at(i) = obs_data_get_int(data,
|
|
|
|
- "saved_preview_projectors");
|
|
|
|
-
|
|
|
|
- obs_data_release(data);
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void OBSBasic::LoadSavedStudioProgramProjectors(obs_data_array_t *array)
|
|
|
|
-{
|
|
|
|
- size_t num = obs_data_array_count(array);
|
|
|
|
-
|
|
|
|
- for (size_t i = 0; i < num; i++) {
|
|
|
|
- obs_data_t *data = obs_data_array_item(array, i);
|
|
|
|
- studioProgramProjectorArray.at(i) = obs_data_get_int(data,
|
|
|
|
- "saved_studio_preview_projectors");
|
|
|
|
-
|
|
|
|
- obs_data_release(data);
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void OBSBasic::LoadSavedMultiviewProjectors(obs_data_array_t *array)
|
|
|
|
-{
|
|
|
|
- size_t num = obs_data_array_count(array);
|
|
|
|
-
|
|
|
|
- for (size_t i = 0; i < num; i++) {
|
|
|
|
- obs_data_t *data = obs_data_array_item(array, i);
|
|
|
|
- multiviewProjectorArray.at(i) = obs_data_get_int(data,
|
|
|
|
- "saved_multiview_projectors");
|
|
|
|
|
|
+ SavedProjectorInfo *info = new SavedProjectorInfo();
|
|
|
|
+ info->monitor = obs_data_get_int(data, "monitor");
|
|
|
|
+ info->type = static_cast<ProjectorType>(obs_data_get_int(data,
|
|
|
|
+ "type"));
|
|
|
|
+ info->geometry = std::string(
|
|
|
|
+ obs_data_get_string(data, "geometry"));
|
|
|
|
+ info->name = std::string(obs_data_get_string(data, "name"));
|
|
|
|
+ savedProjectorsArray.emplace_back(info);
|
|
|
|
|
|
obs_data_release(data);
|
|
obs_data_release(data);
|
|
}
|
|
}
|
|
@@ -847,47 +769,6 @@ void OBSBasic::Load(const char *file)
|
|
ui->transitionDuration->setValue(newDuration);
|
|
ui->transitionDuration->setValue(newDuration);
|
|
SetTransition(curTransition);
|
|
SetTransition(curTransition);
|
|
|
|
|
|
- /* ------------------- */
|
|
|
|
-
|
|
|
|
- obs_data_array_t *savedProjectors = obs_data_get_array(data,
|
|
|
|
- "saved_projectors");
|
|
|
|
-
|
|
|
|
- if (savedProjectors)
|
|
|
|
- LoadSavedProjectors(savedProjectors);
|
|
|
|
-
|
|
|
|
- obs_data_array_release(savedProjectors);
|
|
|
|
-
|
|
|
|
- /* ------------------- */
|
|
|
|
-
|
|
|
|
- obs_data_array_t *savedPreviewProjectors = obs_data_get_array(data,
|
|
|
|
- "saved_preview_projectors");
|
|
|
|
-
|
|
|
|
- if (savedPreviewProjectors)
|
|
|
|
- LoadSavedPreviewProjectors(savedPreviewProjectors);
|
|
|
|
-
|
|
|
|
- obs_data_array_release(savedPreviewProjectors);
|
|
|
|
-
|
|
|
|
- /* ------------------- */
|
|
|
|
-
|
|
|
|
- obs_data_array_t *savedStudioProgramProjectors = obs_data_get_array(data,
|
|
|
|
- "saved_studio_preview_projectors");
|
|
|
|
-
|
|
|
|
- if (savedStudioProgramProjectors)
|
|
|
|
- LoadSavedStudioProgramProjectors(savedStudioProgramProjectors);
|
|
|
|
-
|
|
|
|
- obs_data_array_release(savedStudioProgramProjectors);
|
|
|
|
-
|
|
|
|
- /* ------------------- */
|
|
|
|
-
|
|
|
|
- obs_data_array_t *savedMultiviewProjectors = obs_data_get_array(data,
|
|
|
|
- "saved_multiview_projectors");
|
|
|
|
-
|
|
|
|
- if (savedMultiviewProjectors)
|
|
|
|
- LoadSavedMultiviewProjectors(savedMultiviewProjectors);
|
|
|
|
-
|
|
|
|
- obs_data_array_release(savedMultiviewProjectors);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
retryScene:
|
|
retryScene:
|
|
curScene = obs_get_source_by_name(sceneName);
|
|
curScene = obs_get_source_by_name(sceneName);
|
|
curProgramScene = obs_get_source_by_name(programSceneName);
|
|
curProgramScene = obs_get_source_by_name(programSceneName);
|
|
@@ -918,6 +799,23 @@ retryScene:
|
|
obs_data_array_release(sources);
|
|
obs_data_array_release(sources);
|
|
obs_data_array_release(sceneOrder);
|
|
obs_data_array_release(sceneOrder);
|
|
|
|
|
|
|
|
+ /* ------------------- */
|
|
|
|
+
|
|
|
|
+ bool projectorSave = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
|
|
|
+ "SaveProjectors");
|
|
|
|
+
|
|
|
|
+ if (projectorSave) {
|
|
|
|
+ obs_data_array_t *savedProjectors = obs_data_get_array(data,
|
|
|
|
+ "saved_projectors");
|
|
|
|
+
|
|
|
|
+ if (savedProjectors)
|
|
|
|
+ LoadSavedProjectors(savedProjectors);
|
|
|
|
+
|
|
|
|
+ obs_data_array_release(savedProjectors);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* ------------------- */
|
|
|
|
+
|
|
std::string file_base = strrchr(file, '/') + 1;
|
|
std::string file_base = strrchr(file, '/') + 1;
|
|
file_base.erase(file_base.size() - 5, 5);
|
|
file_base.erase(file_base.size() - 5, 5);
|
|
|
|
|
|
@@ -1608,8 +1506,6 @@ void OBSBasic::OBSInit()
|
|
|
|
|
|
SystemTray(true);
|
|
SystemTray(true);
|
|
|
|
|
|
- OpenSavedProjectors();
|
|
|
|
-
|
|
|
|
if (windowState().testFlag(Qt::WindowFullScreen))
|
|
if (windowState().testFlag(Qt::WindowFullScreen))
|
|
fullscreenInterface = true;
|
|
fullscreenInterface = true;
|
|
|
|
|
|
@@ -2365,13 +2261,7 @@ void OBSBasic::RenameSources(OBSSource source, QString newName,
|
|
volumes[i]->SetName(newName);
|
|
volumes[i]->SetName(newName);
|
|
}
|
|
}
|
|
|
|
|
|
- std::string newText = newName.toUtf8().constData();
|
|
|
|
- std::string prevText = prevName.toUtf8().constData();
|
|
|
|
-
|
|
|
|
- for (size_t j = 0; j < projectorArray.size(); j++) {
|
|
|
|
- if (projectorArray.at(j) == prevText)
|
|
|
|
- projectorArray.at(j) = newText;
|
|
|
|
- }
|
|
|
|
|
|
+ OBSProjector::RenameProjector(prevName, newName);
|
|
|
|
|
|
SaveProject();
|
|
SaveProject();
|
|
|
|
|
|
@@ -5615,40 +5505,17 @@ void OBSBasic::NudgeDown() {Nudge(1, MoveDir::Down);}
|
|
void OBSBasic::NudgeLeft() {Nudge(1, MoveDir::Left);}
|
|
void OBSBasic::NudgeLeft() {Nudge(1, MoveDir::Left);}
|
|
void OBSBasic::NudgeRight() {Nudge(1, MoveDir::Right);}
|
|
void OBSBasic::NudgeRight() {Nudge(1, MoveDir::Right);}
|
|
|
|
|
|
-void OBSBasic::OpenProjector(obs_source_t *source, int monitor, bool window,
|
|
|
|
|
|
+OBSProjector *OBSBasic::OpenProjector(obs_source_t *source, int monitor,
|
|
QString title, ProjectorType type)
|
|
QString title, ProjectorType type)
|
|
{
|
|
{
|
|
/* seriously? 10 monitors? */
|
|
/* seriously? 10 monitors? */
|
|
if (monitor > 9 || monitor > QGuiApplication::screens().size() - 1)
|
|
if (monitor > 9 || monitor > QGuiApplication::screens().size() - 1)
|
|
- return;
|
|
|
|
-
|
|
|
|
- if (!window) {
|
|
|
|
- delete projectors[monitor];
|
|
|
|
- projectors[monitor].clear();
|
|
|
|
- RemoveSavedProjectors(monitor);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- OBSProjector *projector = new OBSProjector(nullptr, source, !!window);
|
|
|
|
- const char *name = obs_source_get_name(source);
|
|
|
|
|
|
+ return nullptr;
|
|
|
|
|
|
- if (!window) {
|
|
|
|
- if (type == ProjectorType::StudioProgram) {
|
|
|
|
- studioProgramProjectorArray.at((size_t)monitor) = 1;
|
|
|
|
- } else if (type == ProjectorType::Preview) {
|
|
|
|
- previewProjectorArray.at((size_t)monitor) = 1;
|
|
|
|
- } else if (type == ProjectorType::Multiview) {
|
|
|
|
- multiviewProjectorArray.at((size_t)monitor) = 1;
|
|
|
|
- } else {
|
|
|
|
- projectorArray.at((size_t)monitor) = name;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!window) {
|
|
|
|
- projector->Init(monitor, false, nullptr, type);
|
|
|
|
- projectors[monitor] = projector;
|
|
|
|
- } else {
|
|
|
|
- projector->Init(monitor, true, title, type);
|
|
|
|
|
|
+ OBSProjector *projector = new OBSProjector(nullptr, source, monitor,
|
|
|
|
+ title, type);
|
|
|
|
|
|
|
|
+ if (monitor < 0) {
|
|
for (auto &projPtr : windowProjectors) {
|
|
for (auto &projPtr : windowProjectors) {
|
|
if (!projPtr) {
|
|
if (!projPtr) {
|
|
projPtr = projector;
|
|
projPtr = projector;
|
|
@@ -5658,20 +5525,27 @@ void OBSBasic::OpenProjector(obs_source_t *source, int monitor, bool window,
|
|
|
|
|
|
if (projector)
|
|
if (projector)
|
|
windowProjectors.push_back(projector);
|
|
windowProjectors.push_back(projector);
|
|
|
|
+ } else {
|
|
|
|
+ delete projectors[monitor];
|
|
|
|
+ projectors[monitor].clear();
|
|
|
|
+
|
|
|
|
+ projectors[monitor] = projector;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ projector->Init();
|
|
|
|
+ return projector;
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenStudioProgramProjector()
|
|
void OBSBasic::OpenStudioProgramProjector()
|
|
{
|
|
{
|
|
int monitor = sender()->property("monitor").toInt();
|
|
int monitor = sender()->property("monitor").toInt();
|
|
- OpenProjector(nullptr, monitor, false, nullptr,
|
|
|
|
- ProjectorType::StudioProgram);
|
|
|
|
|
|
+ OpenProjector(nullptr, monitor, nullptr, ProjectorType::StudioProgram);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenPreviewProjector()
|
|
void OBSBasic::OpenPreviewProjector()
|
|
{
|
|
{
|
|
int monitor = sender()->property("monitor").toInt();
|
|
int monitor = sender()->property("monitor").toInt();
|
|
- OpenProjector(nullptr, monitor, false, nullptr, ProjectorType::Preview);
|
|
|
|
|
|
+ OpenProjector(nullptr, monitor, nullptr, ProjectorType::Preview);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSourceProjector()
|
|
void OBSBasic::OpenSourceProjector()
|
|
@@ -5681,14 +5555,14 @@ void OBSBasic::OpenSourceProjector()
|
|
if (!item)
|
|
if (!item)
|
|
return;
|
|
return;
|
|
|
|
|
|
- OpenProjector(obs_sceneitem_get_source(item), monitor, false);
|
|
|
|
|
|
+ OpenProjector(obs_sceneitem_get_source(item), monitor, nullptr,
|
|
|
|
+ ProjectorType::Source);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenMultiviewProjector()
|
|
void OBSBasic::OpenMultiviewProjector()
|
|
{
|
|
{
|
|
int monitor = sender()->property("monitor").toInt();
|
|
int monitor = sender()->property("monitor").toInt();
|
|
- OpenProjector(nullptr, monitor, false, nullptr,
|
|
|
|
- ProjectorType::Multiview);
|
|
|
|
|
|
+ OpenProjector(nullptr, monitor, nullptr, ProjectorType::Multiview);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSceneProjector()
|
|
void OBSBasic::OpenSceneProjector()
|
|
@@ -5698,59 +5572,52 @@ void OBSBasic::OpenSceneProjector()
|
|
if (!scene)
|
|
if (!scene)
|
|
return;
|
|
return;
|
|
|
|
|
|
- OpenProjector(obs_scene_get_source(scene), monitor, false);
|
|
|
|
|
|
+ OpenProjector(obs_scene_get_source(scene), monitor, nullptr,
|
|
|
|
+ ProjectorType::Scene);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenStudioProgramWindow()
|
|
void OBSBasic::OpenStudioProgramWindow()
|
|
{
|
|
{
|
|
- int monitor = sender()->property("monitor").toInt();
|
|
|
|
- QString title = QTStr("StudioProgramWindow");
|
|
|
|
- OpenProjector(nullptr, monitor, true, title,
|
|
|
|
|
|
+ OpenProjector(nullptr, -1, QTStr("StudioProgramWindow"),
|
|
ProjectorType::StudioProgram);
|
|
ProjectorType::StudioProgram);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenPreviewWindow()
|
|
void OBSBasic::OpenPreviewWindow()
|
|
{
|
|
{
|
|
- int monitor = sender()->property("monitor").toInt();
|
|
|
|
- QString title = QTStr("PreviewWindow");
|
|
|
|
- OpenProjector(nullptr, monitor, true, nullptr, ProjectorType::Preview);
|
|
|
|
|
|
+ OpenProjector(nullptr, -1, QTStr("PreviewWindow"),
|
|
|
|
+ ProjectorType::Preview);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSourceWindow()
|
|
void OBSBasic::OpenSourceWindow()
|
|
{
|
|
{
|
|
- int monitor = sender()->property("monitor").toInt();
|
|
|
|
OBSSceneItem item = GetCurrentSceneItem();
|
|
OBSSceneItem item = GetCurrentSceneItem();
|
|
- OBSSource source = obs_sceneitem_get_source(item);
|
|
|
|
- QString text = QString::fromUtf8(obs_source_get_name(source));
|
|
|
|
-
|
|
|
|
- QString title = QTStr("SourceWindow") + " - " + text;
|
|
|
|
-
|
|
|
|
if (!item)
|
|
if (!item)
|
|
return;
|
|
return;
|
|
|
|
|
|
- OpenProjector(obs_sceneitem_get_source(item), monitor, true, title);
|
|
|
|
|
|
+ OBSSource source = obs_sceneitem_get_source(item);
|
|
|
|
+ QString title = QString::fromUtf8(obs_source_get_name(source));
|
|
|
|
+
|
|
|
|
+ OpenProjector(obs_sceneitem_get_source(item), -1, title,
|
|
|
|
+ ProjectorType::Source);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenMultiviewWindow()
|
|
void OBSBasic::OpenMultiviewWindow()
|
|
{
|
|
{
|
|
- int monitor = sender()->property("monitor").toInt();
|
|
|
|
- OpenProjector(nullptr, monitor, true, "Multiview",
|
|
|
|
|
|
+ OpenProjector(nullptr, -1, QTStr("MultiviewWindowed"),
|
|
ProjectorType::Multiview);
|
|
ProjectorType::Multiview);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSceneWindow()
|
|
void OBSBasic::OpenSceneWindow()
|
|
{
|
|
{
|
|
- int monitor = sender()->property("monitor").toInt();
|
|
|
|
OBSScene scene = GetCurrentScene();
|
|
OBSScene scene = GetCurrentScene();
|
|
- OBSSource source = obs_scene_get_source(scene);
|
|
|
|
- QString text = QString::fromUtf8(obs_source_get_name(source));
|
|
|
|
-
|
|
|
|
- QString title = QTStr("SceneWindow") + " - " + text;
|
|
|
|
-
|
|
|
|
if (!scene)
|
|
if (!scene)
|
|
return;
|
|
return;
|
|
|
|
|
|
- OpenProjector(obs_scene_get_source(scene), monitor, true, title);
|
|
|
|
|
|
+ OBSSource source = obs_scene_get_source(scene);
|
|
|
|
+ QString title = QString::fromUtf8(obs_source_get_name(source));
|
|
|
|
+
|
|
|
|
+ OpenProjector(obs_scene_get_source(scene), -1, title,
|
|
|
|
+ ProjectorType::Scene);
|
|
}
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSavedProjectors()
|
|
void OBSBasic::OpenSavedProjectors()
|
|
@@ -5758,54 +5625,65 @@ void OBSBasic::OpenSavedProjectors()
|
|
bool projectorSave = config_get_bool(GetGlobalConfig(),
|
|
bool projectorSave = config_get_bool(GetGlobalConfig(),
|
|
"BasicWindow", "SaveProjectors");
|
|
"BasicWindow", "SaveProjectors");
|
|
|
|
|
|
- if (projectorSave) {
|
|
|
|
- for (size_t i = 0; i < projectorArray.size(); i++) {
|
|
|
|
- if (projectorArray.at(i).empty() == false) {
|
|
|
|
- OBSSource source = obs_get_source_by_name(
|
|
|
|
- projectorArray.at(i).c_str());
|
|
|
|
-
|
|
|
|
- if (!source) {
|
|
|
|
- RemoveSavedProjectors((int)i);
|
|
|
|
- obs_source_release(source);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
|
|
+ if (!projectorSave)
|
|
|
|
+ return;
|
|
|
|
|
|
- OpenProjector(source, (int)i, false);
|
|
|
|
- obs_source_release(source);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ for (SavedProjectorInfo *info : savedProjectorsArray) {
|
|
|
|
+ OBSProjector *projector = nullptr;
|
|
|
|
+ switch (info->type) {
|
|
|
|
+ case ProjectorType::Source:
|
|
|
|
+ case ProjectorType::Scene: {
|
|
|
|
+ OBSSource source = obs_get_source_by_name(
|
|
|
|
+ info->name.c_str());
|
|
|
|
+ if (!source)
|
|
|
|
+ continue;
|
|
|
|
|
|
- for (size_t i = 0; i < studioProgramProjectorArray.size(); i++) {
|
|
|
|
- if (studioProgramProjectorArray.at(i) == 1) {
|
|
|
|
- OpenProjector(nullptr, (int)i, false, nullptr,
|
|
|
|
- ProjectorType::StudioProgram);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ QString title = nullptr;
|
|
|
|
+ if (info->monitor < 0)
|
|
|
|
+ title = QString::fromUtf8(
|
|
|
|
+ obs_source_get_name(source));
|
|
|
|
|
|
- for (size_t i = 0; i < previewProjectorArray.size(); i++) {
|
|
|
|
- if (previewProjectorArray.at(i) == 1) {
|
|
|
|
- OpenProjector(nullptr, (int)i, false, nullptr,
|
|
|
|
- ProjectorType::Preview);
|
|
|
|
- }
|
|
|
|
|
|
+ projector = OpenProjector(source, info->monitor, title,
|
|
|
|
+ info->type);
|
|
|
|
+
|
|
|
|
+ obs_source_release(source);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
+ case ProjectorType::Preview: {
|
|
|
|
+ projector = OpenProjector(nullptr, info->monitor,
|
|
|
|
+ QTStr("PreviewWindow"),
|
|
|
|
+ ProjectorType::Preview);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case ProjectorType::StudioProgram: {
|
|
|
|
+ projector = OpenProjector(nullptr, info->monitor,
|
|
|
|
+ QTStr("StudioProgramWindow"),
|
|
|
|
+ ProjectorType::StudioProgram);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ case ProjectorType::Multiview: {
|
|
|
|
+ projector = OpenProjector(nullptr, info->monitor,
|
|
|
|
+ QTStr("MultiviewWindowed"),
|
|
|
|
+ ProjectorType::Multiview);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!info->geometry.empty()) {
|
|
|
|
+ QByteArray byteArray = QByteArray::fromBase64(
|
|
|
|
+ QByteArray(info->geometry.c_str()));
|
|
|
|
+ projector->restoreGeometry(byteArray);
|
|
|
|
|
|
- for (size_t i = 0; i < multiviewProjectorArray.size(); i++) {
|
|
|
|
- if (multiviewProjectorArray.at(i) == 1) {
|
|
|
|
- OpenProjector(nullptr, (int)i, false, nullptr,
|
|
|
|
- ProjectorType::Multiview);
|
|
|
|
|
|
+ if (!WindowPositionValid(projector->normalGeometry())) {
|
|
|
|
+ QRect rect = App()->desktop()->geometry();
|
|
|
|
+ projector->setGeometry(QStyle::alignedRect(
|
|
|
|
+ Qt::LeftToRight,
|
|
|
|
+ Qt::AlignCenter, size(), rect));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void OBSBasic::RemoveSavedProjectors(int monitor)
|
|
|
|
-{
|
|
|
|
- studioProgramProjectorArray.at((size_t)monitor) = 0;
|
|
|
|
- multiviewProjectorArray.at((size_t)monitor) = 0;
|
|
|
|
- previewProjectorArray.at((size_t)monitor) = 0;
|
|
|
|
- projectorArray.at((size_t)monitor) = "";
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
void OBSBasic::on_actionFullscreenInterface_triggered()
|
|
void OBSBasic::on_actionFullscreenInterface_triggered()
|
|
{
|
|
{
|
|
if (!fullscreenInterface)
|
|
if (!fullscreenInterface)
|