diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index dcbd055a840b5dfe0a48dff4ffb4a52d52429bcf..eaa84d002c58d800e2e96f5fb599de80c1ea72b5 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -42,6 +42,7 @@ SceneWindow="Windowed Projector (Scene)" SourceWindow="Windowed Projector (Source)" MultiviewProjector="Multiview (Fullscreen)" MultiviewWindowed="Multiview (Windowed)" +ResizeProjectorWindowToContent="Fit window to content" Clear="Clear" Revert="Revert" Show="Show" diff --git a/UI/window-projector.cpp b/UI/window-projector.cpp index 73fe8b87aed96ec30567b96be39c74961fa71e74..2ea160067764363396b57b0305c1330a04a3d208 100644 --- a/UI/window-projector.cpp +++ b/UI/window-projector.cpp @@ -828,10 +828,15 @@ 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())); + } + popup.addAction(QTStr("Close"), this, SLOT(EscapeTriggered())); popup.exec(QCursor::pos()); } @@ -1055,6 +1060,33 @@ void OBSProjector::OpenWindowedProjector() UpdateProjectorTitle(QT_UTF8(obs_source_get_name(source))); } +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::closeEvent(QCloseEvent *event) { EscapeTriggered(); diff --git a/UI/window-projector.hpp b/UI/window-projector.hpp index 0831e9187b3342587086e775181de0f121189a80..8b5e5a918070dd8b1583cc15e564c50b4511abc9 100644 --- a/UI/window-projector.hpp +++ b/UI/window-projector.hpp @@ -78,6 +78,7 @@ private: private slots: void EscapeTriggered(); void OpenFullScreenProjector(); + void ResizeToContent(); void OpenWindowedProjector(); public: