提交 167e781b 编写于 作者: J jp9000

UI: Add fullscreen projector options

Add the ability to use a fullscreen projector for scenes, sources, and
the preview display.
上级 c6828304
...@@ -24,6 +24,7 @@ Properties="Properties" ...@@ -24,6 +24,7 @@ Properties="Properties"
MoveUp="Move Up" MoveUp="Move Up"
MoveDown="Move Down" MoveDown="Move Down"
Settings="Settings" Settings="Settings"
Display="Display"
Name="Name" Name="Name"
Exit="Exit" Exit="Exit"
Mixer="Mixer" Mixer="Mixer"
...@@ -31,6 +32,9 @@ Browse="Browse" ...@@ -31,6 +32,9 @@ Browse="Browse"
Mono="Mono" Mono="Mono"
Stereo="Stereo" Stereo="Stereo"
DroppedFrames="Dropped Frames %1 (%2%)" DroppedFrames="Dropped Frames %1 (%2%)"
PreviewProjector="Fullscreen Projector (Preview)"
SceneProjector="Fullscreen Projector (Scene)"
SourceProjector="Fullscreen Projector (Source)"
# "name already exists" dialog box # "name already exists" dialog box
NameExists.Title="Name already exists" NameExists.Title="Name already exists"
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include "window-basic-main-outputs.hpp" #include "window-basic-main-outputs.hpp"
#include "window-basic-properties.hpp" #include "window-basic-properties.hpp"
#include "window-log-reply.hpp" #include "window-log-reply.hpp"
#include "window-projector.hpp"
#include "window-remux.hpp" #include "window-remux.hpp"
#include "qt-wrappers.hpp" #include "qt-wrappers.hpp"
#include "display-helpers.hpp" #include "display-helpers.hpp"
...@@ -1702,6 +1703,11 @@ void OBSBasic::closeEvent(QCloseEvent *event) ...@@ -1702,6 +1703,11 @@ void OBSBasic::closeEvent(QCloseEvent *event)
} }
} }
for (QPointer<QWidget> &projector : projectors) {
delete projector;
projector.clear();
}
// remove draw callback in case our drawable surfaces go away before // remove draw callback in case our drawable surfaces go away before
// the destructor gets called // the destructor gets called
obs_remove_draw_callback(OBSBasic::RenderMain, this); obs_remove_draw_callback(OBSBasic::RenderMain, this);
...@@ -1838,9 +1844,33 @@ void OBSBasic::EditSceneName() ...@@ -1838,9 +1844,33 @@ void OBSBasic::EditSceneName()
item->setFlags(flags); item->setFlags(flags);
} }
static void AddProjectorMenuMonitors(QMenu *parent, QObject *target,
const char *slot)
{
QAction *action;
std::vector<MonitorInfo> monitors;
GetMonitors(monitors);
for (int i = 0; (size_t)i < monitors.size(); i++) {
const MonitorInfo &monitor = monitors[i];
QString str = QString("%1 %2: %3x%4 @ %5,%6").
arg(QTStr("Display"),
QString::number(i),
QString::number((int)monitor.cx),
QString::number((int)monitor.cy),
QString::number((int)monitor.x),
QString::number((int)monitor.y));
action = parent->addAction(str, target, slot);
action->setProperty("monitor", i);
}
}
void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos) void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
{ {
QListWidgetItem *item = ui->scenes->itemAt(pos); QListWidgetItem *item = ui->scenes->itemAt(pos);
QPointer<QMenu> sceneProjectorMenu;
QMenu popup(this); QMenu popup(this);
popup.addAction(QTStr("Add"), popup.addAction(QTStr("Add"),
...@@ -1854,6 +1884,11 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos) ...@@ -1854,6 +1884,11 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
this, SLOT(RemoveSelectedScene()), this, SLOT(RemoveSelectedScene()),
DeleteKeys.front()); DeleteKeys.front());
popup.addSeparator(); popup.addSeparator();
sceneProjectorMenu = new QMenu(QTStr("SceneProjector"));
AddProjectorMenuMonitors(sceneProjectorMenu, this,
SLOT(OpenSceneProjector()));
popup.addMenu(sceneProjectorMenu);
popup.addSeparator();
popup.addAction(QTStr("Filters"), this, popup.addAction(QTStr("Filters"), this,
SLOT(OpenSceneFilters())); SLOT(OpenSceneFilters()));
} }
...@@ -1978,6 +2013,8 @@ void OBSBasic::EditSceneItemName() ...@@ -1978,6 +2013,8 @@ void OBSBasic::EditSceneItemName()
void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview) void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview)
{ {
QMenu popup(this); QMenu popup(this);
QPointer<QMenu> previewProjector;
QPointer<QMenu> sourceProjector;
if (preview) { if (preview) {
QAction *action = popup.addAction( QAction *action = popup.addAction(
...@@ -1986,6 +2023,12 @@ void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview) ...@@ -1986,6 +2023,12 @@ void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview)
action->setCheckable(true); action->setCheckable(true);
action->setChecked(obs_preview_enabled()); action->setChecked(obs_preview_enabled());
previewProjector = new QMenu(QTStr("PreviewProjector"));
AddProjectorMenuMonitors(previewProjector, this,
SLOT(OpenPreviewProjector()));
popup.addMenu(previewProjector);
popup.addSeparator(); popup.addSeparator();
} }
...@@ -2009,6 +2052,13 @@ void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview) ...@@ -2009,6 +2052,13 @@ void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview)
popup.addSeparator(); popup.addSeparator();
popup.addMenu(ui->orderMenu); popup.addMenu(ui->orderMenu);
popup.addMenu(ui->transformMenu); popup.addMenu(ui->transformMenu);
sourceProjector = new QMenu(QTStr("SourceProjector"));
AddProjectorMenuMonitors(sourceProjector, this,
SLOT(OpenSourceProjector()));
popup.addSeparator();
popup.addMenu(sourceProjector);
popup.addSeparator(); popup.addSeparator();
action = popup.addAction(QTStr("Interact"), this, action = popup.addAction(QTStr("Interact"), this,
...@@ -2496,6 +2546,7 @@ void OBSBasic::on_previewDisabledLabel_customContextMenuRequested( ...@@ -2496,6 +2546,7 @@ void OBSBasic::on_previewDisabledLabel_customContextMenuRequested(
const QPoint &pos) const QPoint &pos)
{ {
QMenu popup(this); QMenu popup(this);
QPointer<QMenu> previewProjector;
QAction *action = popup.addAction( QAction *action = popup.addAction(
QTStr("Basic.Main.PreviewConextMenu.Enable"), QTStr("Basic.Main.PreviewConextMenu.Enable"),
...@@ -2503,6 +2554,11 @@ void OBSBasic::on_previewDisabledLabel_customContextMenuRequested( ...@@ -2503,6 +2554,11 @@ void OBSBasic::on_previewDisabledLabel_customContextMenuRequested(
action->setCheckable(true); action->setCheckable(true);
action->setChecked(obs_preview_enabled()); action->setChecked(obs_preview_enabled());
previewProjector = new QMenu(QTStr("PreviewProjector"));
AddProjectorMenuMonitors(previewProjector, this,
SLOT(OpenPreviewProjector()));
popup.addMenu(previewProjector);
popup.exec(QCursor::pos()); popup.exec(QCursor::pos());
UNUSED_PARAMETER(pos); UNUSED_PARAMETER(pos);
...@@ -2851,3 +2907,44 @@ void OBSBasic::NudgeUp() {Nudge(1, MoveDir::Up);} ...@@ -2851,3 +2907,44 @@ void OBSBasic::NudgeUp() {Nudge(1, MoveDir::Up);}
void OBSBasic::NudgeDown() {Nudge(1, MoveDir::Down);} 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)
{
/* seriously? 10 monitors? */
if (monitor > 9)
return;
delete projectors[monitor];
projectors[monitor].clear();
OBSProjector *projector = new OBSProjector(this, source);
projector->Init(monitor);
projectors[monitor] = projector;
}
void OBSBasic::OpenPreviewProjector()
{
int monitor = sender()->property("monitor").toInt();
OpenProjector(nullptr, monitor);
}
void OBSBasic::OpenSourceProjector()
{
int monitor = sender()->property("monitor").toInt();
OBSSceneItem item = GetCurrentSceneItem();
if (!item)
return;
OpenProjector(obs_sceneitem_get_source(item), monitor);
}
void OBSBasic::OpenSceneProjector()
{
int monitor = sender()->property("monitor").toInt();
OBSScene scene = GetCurrentScene();
if (!scene)
return;
OpenProjector(obs_scene_get_source(scene), monitor);
}
...@@ -97,6 +97,8 @@ private: ...@@ -97,6 +97,8 @@ private:
ConfigFile basicConfig; ConfigFile basicConfig;
QPointer<QWidget> projectors[10];
void DrawBackdrop(float cx, float cy); void DrawBackdrop(float cx, float cy);
void SetupEncoders(); void SetupEncoders();
...@@ -145,6 +147,7 @@ private: ...@@ -145,6 +147,7 @@ private:
void CreateFiltersWindow(obs_source_t *source); void CreateFiltersWindow(obs_source_t *source);
void Nudge(int dist, MoveDir dir); void Nudge(int dist, MoveDir dir);
void OpenProjector(obs_source_t *source, int monitor);
public slots: public slots:
void StreamingStart(); void StreamingStart();
...@@ -325,6 +328,10 @@ private slots: ...@@ -325,6 +328,10 @@ private slots:
void NudgeLeft(); void NudgeLeft();
void NudgeRight(); void NudgeRight();
void OpenPreviewProjector();
void OpenSourceProjector();
void OpenSceneProjector();
public: public:
explicit OBSBasic(QWidget *parent = 0); explicit OBSBasic(QWidget *parent = 0);
virtual ~OBSBasic(); virtual ~OBSBasic();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册