New upstream version 26.0.0+dfsg1
This commit is contained in:
parent
8e020cdacb
commit
240080891f
837 changed files with 41275 additions and 9196 deletions
|
|
@ -10,6 +10,8 @@
|
|||
#include "platform.hpp"
|
||||
|
||||
static QList<OBSProjector *> multiviewProjectors;
|
||||
static QList<OBSProjector *> allProjectors;
|
||||
|
||||
static bool updatingMultiview = false, drawLabel, drawSafeArea, mouseSwitching,
|
||||
transitionOnDoubleClick;
|
||||
static MultiviewLayout multiviewLayout;
|
||||
|
|
@ -22,6 +24,12 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,
|
|||
removedSignal(obs_source_get_signal_handler(source), "remove",
|
||||
OBSSourceRemoved, this)
|
||||
{
|
||||
isAlwaysOnTop = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
||||
"ProjectorAlwaysOnTop");
|
||||
|
||||
if (isAlwaysOnTop)
|
||||
setWindowFlags(Qt::WindowStaysOnTopHint);
|
||||
|
||||
type = type_;
|
||||
|
||||
setWindowIcon(QIcon::fromTheme("obs", QIcon(":/res/images/obs.png")));
|
||||
|
|
@ -38,9 +46,6 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,
|
|||
addAction(action);
|
||||
connect(action, SIGNAL(triggered()), this, SLOT(EscapeTriggered()));
|
||||
|
||||
SetAlwaysOnTop(this, config_get_bool(GetGlobalConfig(), "BasicWindow",
|
||||
"ProjectorAlwaysOnTop"));
|
||||
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
||||
//disable application quit when last window closed
|
||||
|
|
@ -57,6 +62,8 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,
|
|||
};
|
||||
|
||||
connect(this, &OBSQTDisplay::DisplayCreated, addDrawCallback);
|
||||
connect(App(), &QGuiApplication::screenRemoved, this,
|
||||
&OBSProjector::ScreenRemoved);
|
||||
|
||||
if (type == ProjectorType::Multiview) {
|
||||
obs_enter_graphics();
|
||||
|
|
@ -121,6 +128,8 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,
|
|||
if (source)
|
||||
obs_source_inc_showing(source);
|
||||
|
||||
allProjectors.push_back(this);
|
||||
|
||||
ready = true;
|
||||
|
||||
show();
|
||||
|
|
@ -160,12 +169,14 @@ OBSProjector::~OBSProjector()
|
|||
multiviewProjectors.removeAll(this);
|
||||
|
||||
App()->DecrementSleepInhibition();
|
||||
|
||||
screen = nullptr;
|
||||
}
|
||||
|
||||
void OBSProjector::SetMonitor(int monitor)
|
||||
{
|
||||
savedMonitor = monitor;
|
||||
QScreen *screen = QGuiApplication::screens()[monitor];
|
||||
screen = QGuiApplication::screens()[monitor];
|
||||
setGeometry(screen->geometry());
|
||||
showFullScreen();
|
||||
SetHideCursor();
|
||||
|
|
@ -173,6 +184,9 @@ void OBSProjector::SetMonitor(int monitor)
|
|||
|
||||
void OBSProjector::SetHideCursor()
|
||||
{
|
||||
if (savedMonitor == -1)
|
||||
return;
|
||||
|
||||
bool hideCursor = config_get_bool(GetGlobalConfig(), "BasicWindow",
|
||||
"HideProjectorCursor");
|
||||
|
||||
|
|
@ -825,10 +839,25 @@ void OBSProjector::mousePressEvent(QMouseEvent *event)
|
|||
SLOT(OpenFullScreenProjector()));
|
||||
popup.addMenu(projectorMenu);
|
||||
|
||||
if (GetMonitor() > -1)
|
||||
if (GetMonitor() > -1) {
|
||||
popup.addAction(QTStr("Windowed"), this,
|
||||
SLOT(OpenWindowedProjector()));
|
||||
|
||||
} else if (!this->isMaximized()) {
|
||||
popup.addAction(QTStr("ResizeProjectorWindowToContent"),
|
||||
this, SLOT(ResizeToContent()));
|
||||
}
|
||||
|
||||
QAction *alwaysOnTopButton =
|
||||
new QAction(QTStr("Basic.MainMenu.AlwaysOnTop"), this);
|
||||
alwaysOnTopButton->setCheckable(true);
|
||||
alwaysOnTopButton->setChecked(isAlwaysOnTop);
|
||||
|
||||
connect(alwaysOnTopButton, &QAction::toggled, this,
|
||||
&OBSProjector::AlwaysOnTopToggled);
|
||||
|
||||
popup.addAction(alwaysOnTopButton);
|
||||
|
||||
popup.addAction(QTStr("Close"), this, SLOT(EscapeTriggered()));
|
||||
popup.exec(QCursor::pos());
|
||||
}
|
||||
|
|
@ -854,6 +883,8 @@ void OBSProjector::EscapeTriggered()
|
|||
{
|
||||
OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
||||
main->DeleteProjector(this);
|
||||
|
||||
allProjectors.removeAll(this);
|
||||
}
|
||||
|
||||
void OBSProjector::UpdateMultiview()
|
||||
|
|
@ -1050,6 +1081,39 @@ void OBSProjector::OpenWindowedProjector()
|
|||
savedMonitor = -1;
|
||||
|
||||
UpdateProjectorTitle(QT_UTF8(obs_source_get_name(source)));
|
||||
screen = nullptr;
|
||||
}
|
||||
|
||||
void OBSProjector::ResizeToContent()
|
||||
{
|
||||
OBSSource source = GetSource();
|
||||
uint32_t targetCX;
|
||||
uint32_t targetCY;
|
||||
int x, y, newX, newY;
|
||||
float scale;
|
||||
|
||||
if (source) {
|
||||
targetCX = std::max(obs_source_get_width(source), 1u);
|
||||
targetCY = std::max(obs_source_get_height(source), 1u);
|
||||
} else {
|
||||
struct obs_video_info ovi;
|
||||
obs_get_video_info(&ovi);
|
||||
targetCX = ovi.base_width;
|
||||
targetCY = ovi.base_height;
|
||||
}
|
||||
|
||||
QSize size = this->size();
|
||||
GetScaleAndCenterPos(targetCX, targetCY, size.width(), size.height(), x,
|
||||
y, scale);
|
||||
|
||||
newX = size.width() - (x * 2);
|
||||
newY = size.height() - (y * 2);
|
||||
resize(newX, newY);
|
||||
}
|
||||
|
||||
void OBSProjector::AlwaysOnTopToggled(bool isAlwaysOnTop)
|
||||
{
|
||||
SetIsAlwaysOnTop(isAlwaysOnTop, true);
|
||||
}
|
||||
|
||||
void OBSProjector::closeEvent(QCloseEvent *event)
|
||||
|
|
@ -1057,3 +1121,30 @@ void OBSProjector::closeEvent(QCloseEvent *event)
|
|||
EscapeTriggered();
|
||||
event->accept();
|
||||
}
|
||||
|
||||
bool OBSProjector::IsAlwaysOnTop() const
|
||||
{
|
||||
return isAlwaysOnTop;
|
||||
}
|
||||
|
||||
bool OBSProjector::IsAlwaysOnTopOverridden() const
|
||||
{
|
||||
return isAlwaysOnTopOverridden;
|
||||
}
|
||||
|
||||
void OBSProjector::SetIsAlwaysOnTop(bool isAlwaysOnTop, bool isOverridden)
|
||||
{
|
||||
this->isAlwaysOnTop = isAlwaysOnTop;
|
||||
this->isAlwaysOnTopOverridden = isOverridden;
|
||||
|
||||
SetAlwaysOnTop(this, isAlwaysOnTop);
|
||||
}
|
||||
|
||||
void OBSProjector::ScreenRemoved(QScreen *screen_)
|
||||
{
|
||||
if (GetMonitor() < 0 || !screen)
|
||||
return;
|
||||
|
||||
if (screen == screen_)
|
||||
EscapeTriggered();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue