A small refactor of AddProjectorMenuMonitors, as template functions need
to be fully defined in header files.
Also makes the function static as there is no point of it being a
non-static member function. In theory it could also be moved out of
OBSBasic but there isn't really a better place for it so let's leave it
where it is for simplicity.
This uses the SetWindowDisplayAffinity API to hide windows from capture
applications (including OBS). This is not perfect - internal windows
such as context menus, combo box dropdowns, etc will still be displayed.
Even with these limitations, it should help people with single monitors
capture content with less interference from the OBS window.
This implementation is for Windows only but the code is generic enough
that adding other platforms should be straightforward.
Adds a "18 Scenes" multiview option. The 18 scene view leaves the
preview and program sized to the upper half of the window
Settings index in combobox may not match up with enum index. Settings
in the dropdown can now be ordered separately from the enum order.
Adds an option to the context menu of a windowed projector to allow
resizing the aspect ratio of the client area of the window to the
contents of what's being projected (so that there's no extra space).
Calling showFullScreen after setGeometry puts the projector on the
expected monitor. Previously (on FreeBSD, at least) it opened on the
primary display.
If a projector was created fullscreen, the isFullScreen() call would
fail since the window hasn't been displayed by Qt yet, resulting in the
cursor hiding choice not being applied. This moves the cursor hiding
into the SetMonitor call which is used for all code paths creating a
fullscreen projector, ensuring the setting is applied.
Fixes https://github.com/obsproject/obs-studio/issues/2687
Before this change, opening up a fullscreen projector would have the
wrong window title (Windowed Projector). This was because the call to
update the window title was called before a monitor is set, and the
title is determined by whether a monitor is set.
This change moves the update title call to after the geometry or monitor
gets set, ensuring the window title is correct.
Code submissions have continually suffered from formatting
inconsistencies that constantly have to be addressed. Using
clang-format simplifies this by making code formatting more consistent,
and allows automation of the code formatting so that maintainers can
focus more on the code itself instead of code formatting.
Don't override the theme color settings for the Projector.
If required, the background color of the projector can be changed via
OBSProjector {qproperty-...}
record placed after "OBSQTDisplay {qproperty-...}" section in the theme
file (qss).
I considered making this an option, but I decided against it because
I felt it wasn't necessary and would make the settings more complex.
Opinions are welcome.