|
@@ -601,11 +601,8 @@ obs_data_array_t *OBSBasic::SaveProjectors()
|
|
|
obs_data_release(data);
|
|
|
};
|
|
|
|
|
|
- for (QPointer<QWidget> &proj : projectors)
|
|
|
- saveProjector(static_cast<OBSProjector *>(proj.data()));
|
|
|
-
|
|
|
- for (QPointer<QWidget> &proj : windowProjectors)
|
|
|
- saveProjector(static_cast<OBSProjector *>(proj.data()));
|
|
|
+ for (size_t i = 0; i < projectors.size(); i++)
|
|
|
+ saveProjector(static_cast<OBSProjector *>(projectors[i]));
|
|
|
|
|
|
return savedProjectors;
|
|
|
}
|
|
@@ -2678,7 +2675,10 @@ void OBSBasic::RenameSources(OBSSource source, QString newName,
|
|
|
volumes[i]->SetName(newName);
|
|
|
}
|
|
|
|
|
|
- OBSProjector::RenameProjector(prevName, newName);
|
|
|
+ for (size_t i = 0; i < projectors.size(); i++) {
|
|
|
+ if (projectors[i]->GetSource() == source)
|
|
|
+ projectors[i]->RenameProjector(prevName, newName);
|
|
|
+ }
|
|
|
|
|
|
SaveProject();
|
|
|
|
|
@@ -3738,15 +3738,6 @@ void OBSBasic::CloseDialogs()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for (QPointer<QWidget> &projector : windowProjectors) {
|
|
|
- delete projector;
|
|
|
- projector.clear();
|
|
|
- }
|
|
|
- for (QPointer<QWidget> &projector : projectors) {
|
|
|
- delete projector;
|
|
|
- projector.clear();
|
|
|
- }
|
|
|
-
|
|
|
if (!stats.isNull())
|
|
|
stats->close(); //call close to save Stats geometry
|
|
|
if (!remux.isNull())
|
|
@@ -3788,6 +3779,13 @@ void OBSBasic::ClearSceneData()
|
|
|
ClearQuickTransitions();
|
|
|
ui->transitions->clear();
|
|
|
|
|
|
+ for (size_t i = 0; i < projectors.size(); i++) {
|
|
|
+ if (projectors[i])
|
|
|
+ delete projectors[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ projectors.clear();
|
|
|
+
|
|
|
obs_set_output_source(0, nullptr);
|
|
|
obs_set_output_source(1, nullptr);
|
|
|
obs_set_output_source(2, nullptr);
|
|
@@ -4017,8 +4015,8 @@ void OBSBasic::EditSceneName()
|
|
|
item->setFlags(flags);
|
|
|
}
|
|
|
|
|
|
-static void AddProjectorMenuMonitors(QMenu *parent, QObject *target,
|
|
|
- const char *slot)
|
|
|
+void OBSBasic::AddProjectorMenuMonitors(QMenu *parent, QObject *target,
|
|
|
+ const char *slot)
|
|
|
{
|
|
|
QAction *action;
|
|
|
QList<QScreen *> screens = QGuiApplication::screens();
|
|
@@ -6438,32 +6436,29 @@ void OBSBasic::NudgeRight()
|
|
|
Nudge(1, MoveDir::Right);
|
|
|
}
|
|
|
|
|
|
+void OBSBasic::DeleteProjector(OBSProjector *projector)
|
|
|
+{
|
|
|
+ for (size_t i = 0; i < projectors.size(); i++) {
|
|
|
+ if (projectors[i] == projector) {
|
|
|
+ projectors[i]->deleteLater();
|
|
|
+ projectors.erase(projectors.begin() + i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
OBSProjector *OBSBasic::OpenProjector(obs_source_t *source, int monitor,
|
|
|
- QString title, ProjectorType type)
|
|
|
+ ProjectorType type)
|
|
|
{
|
|
|
/* seriously? 10 monitors? */
|
|
|
if (monitor > 9 || monitor > QGuiApplication::screens().size() - 1)
|
|
|
return nullptr;
|
|
|
|
|
|
OBSProjector *projector =
|
|
|
- new OBSProjector(nullptr, source, monitor, title, type);
|
|
|
+ new OBSProjector(nullptr, source, monitor, type);
|
|
|
|
|
|
- if (monitor < 0) {
|
|
|
- for (auto &projPtr : windowProjectors) {
|
|
|
- if (!projPtr) {
|
|
|
- projPtr = projector;
|
|
|
- projector = nullptr;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (projector)
|
|
|
- windowProjectors.push_back(projector);
|
|
|
- } else {
|
|
|
- delete projectors[monitor];
|
|
|
- projectors[monitor].clear();
|
|
|
-
|
|
|
- projectors[monitor] = projector;
|
|
|
- }
|
|
|
+ if (projector)
|
|
|
+ projectors.emplace_back(projector);
|
|
|
|
|
|
return projector;
|
|
|
}
|
|
@@ -6471,13 +6466,13 @@ OBSProjector *OBSBasic::OpenProjector(obs_source_t *source, int monitor,
|
|
|
void OBSBasic::OpenStudioProgramProjector()
|
|
|
{
|
|
|
int monitor = sender()->property("monitor").toInt();
|
|
|
- OpenProjector(nullptr, monitor, nullptr, ProjectorType::StudioProgram);
|
|
|
+ OpenProjector(nullptr, monitor, ProjectorType::StudioProgram);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenPreviewProjector()
|
|
|
{
|
|
|
int monitor = sender()->property("monitor").toInt();
|
|
|
- OpenProjector(nullptr, monitor, nullptr, ProjectorType::Preview);
|
|
|
+ OpenProjector(nullptr, monitor, ProjectorType::Preview);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSourceProjector()
|
|
@@ -6487,14 +6482,14 @@ void OBSBasic::OpenSourceProjector()
|
|
|
if (!item)
|
|
|
return;
|
|
|
|
|
|
- OpenProjector(obs_sceneitem_get_source(item), monitor, nullptr,
|
|
|
+ OpenProjector(obs_sceneitem_get_source(item), monitor,
|
|
|
ProjectorType::Source);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenMultiviewProjector()
|
|
|
{
|
|
|
int monitor = sender()->property("monitor").toInt();
|
|
|
- OpenProjector(nullptr, monitor, nullptr, ProjectorType::Multiview);
|
|
|
+ OpenProjector(nullptr, monitor, ProjectorType::Multiview);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSceneProjector()
|
|
@@ -6504,20 +6499,18 @@ void OBSBasic::OpenSceneProjector()
|
|
|
if (!scene)
|
|
|
return;
|
|
|
|
|
|
- OpenProjector(obs_scene_get_source(scene), monitor, nullptr,
|
|
|
+ OpenProjector(obs_scene_get_source(scene), monitor,
|
|
|
ProjectorType::Scene);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenStudioProgramWindow()
|
|
|
{
|
|
|
- OpenProjector(nullptr, -1, QTStr("StudioProgramWindow"),
|
|
|
- ProjectorType::StudioProgram);
|
|
|
+ OpenProjector(nullptr, -1, ProjectorType::StudioProgram);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenPreviewWindow()
|
|
|
{
|
|
|
- OpenProjector(nullptr, -1, QTStr("PreviewWindow"),
|
|
|
- ProjectorType::Preview);
|
|
|
+ OpenProjector(nullptr, -1, ProjectorType::Preview);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSourceWindow()
|
|
@@ -6527,16 +6520,14 @@ void OBSBasic::OpenSourceWindow()
|
|
|
return;
|
|
|
|
|
|
OBSSource source = obs_sceneitem_get_source(item);
|
|
|
- QString title = QString::fromUtf8(obs_source_get_name(source));
|
|
|
|
|
|
- OpenProjector(obs_sceneitem_get_source(item), -1, title,
|
|
|
+ OpenProjector(obs_sceneitem_get_source(item), -1,
|
|
|
ProjectorType::Source);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenMultiviewWindow()
|
|
|
{
|
|
|
- OpenProjector(nullptr, -1, QTStr("MultiviewWindowed"),
|
|
|
- ProjectorType::Multiview);
|
|
|
+ OpenProjector(nullptr, -1, ProjectorType::Multiview);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSceneWindow()
|
|
@@ -6546,10 +6537,8 @@ void OBSBasic::OpenSceneWindow()
|
|
|
return;
|
|
|
|
|
|
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);
|
|
|
+ OpenProjector(obs_scene_get_source(scene), -1, ProjectorType::Scene);
|
|
|
}
|
|
|
|
|
|
void OBSBasic::OpenSavedProjectors()
|
|
@@ -6564,33 +6553,15 @@ void OBSBasic::OpenSavedProjectors()
|
|
|
if (!source)
|
|
|
continue;
|
|
|
|
|
|
- QString title = nullptr;
|
|
|
- if (info->monitor < 0)
|
|
|
- title = QString::fromUtf8(
|
|
|
- obs_source_get_name(source));
|
|
|
-
|
|
|
- projector = OpenProjector(source, info->monitor, title,
|
|
|
+ projector = OpenProjector(source, info->monitor,
|
|
|
info->type);
|
|
|
|
|
|
obs_source_release(source);
|
|
|
break;
|
|
|
}
|
|
|
- case ProjectorType::Preview: {
|
|
|
+ default: {
|
|
|
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);
|
|
|
+ info->type);
|
|
|
break;
|
|
|
}
|
|
|
}
|