mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-24 23:31:36 +08:00
UI: Add ability to change projector type
This commit is contained in:
+43
-72
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user