提交 89d6d5ff 编写于 作者: C cg2121 提交者: jp9000

UI: Add option to make projectors always on top

Closes jp9000/obs-studio#563
上级 18276c0c
......@@ -376,6 +376,7 @@ Basic.Settings.General.Language="Language"
Basic.Settings.General.WarnBeforeStartingStream="Show confirmation dialog when starting streams"
Basic.Settings.General.WarnBeforeStoppingStream="Show confirmation dialog when stopping streams"
Basic.Settings.General.HideProjectorCursor="Hide cursor over projectors"
Basic.Settings.General.ProjectorAlwaysOnTop="Make projectors always on top"
Basic.Settings.General.Snapping="Source Alignment Snapping"
Basic.Settings.General.ScreenSnapping="Snap Sources to edge of screen"
Basic.Settings.General.CenterSnapping="Snap Sources to horizontal and vertical center"
......
......@@ -185,21 +185,21 @@
</property>
</widget>
</item>
<item row="6" column="1">
<item row="7" column="1">
<widget class="QCheckBox" name="recordWhenStreaming">
<property name="text">
<string>Basic.Settings.General.RecordWhenStreaming</string>
</property>
</widget>
</item>
<item row="8" column="1">
<item row="9" column="1">
<widget class="QCheckBox" name="systemTrayEnabled">
<property name="text">
<string>Basic.Settings.General.SysTrayEnabled</string>
</property>
</widget>
</item>
<item row="9" column="1">
<item row="10" column="1">
<widget class="QCheckBox" name="systemTrayWhenStarted">
<property name="enabled">
<bool>false</bool>
......@@ -209,14 +209,14 @@
</property>
</widget>
</item>
<item row="10" column="0" colspan="2">
<item row="11" column="0" colspan="2">
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2">
<item row="12" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_10">
<property name="enabled">
<bool>true</bool>
......@@ -316,7 +316,7 @@
</property>
</widget>
</item>
<item row="7" column="1">
<item row="8" column="1">
<widget class="QCheckBox" name="keepRecordStreamStops">
<property name="enabled">
<bool>false</bool>
......@@ -326,6 +326,13 @@
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QCheckBox" name="projectorAlwaysOnTop">
<property name="text">
<string>Basic.Settings.General.ProjectorAlwaysOnTop</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="streamPage">
......@@ -2538,8 +2545,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>98</width>
<height>28</height>
<width>80</width>
<height>16</height>
</rect>
</property>
</widget>
......@@ -2903,9 +2910,9 @@
<property name="geometry">
<rect>
<x>0</x>
<y>-206</y>
<width>803</width>
<height>820</height>
<y>0</y>
<width>559</width>
<height>681</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_16">
......
......@@ -132,12 +132,12 @@ vector<string> GetPreferredLocales()
return result;
}
bool IsAlwaysOnTop(QMainWindow *window)
bool IsAlwaysOnTop(QWidget *window)
{
return (window->windowFlags() & Qt::WindowStaysOnTopHint) != 0;
}
void SetAlwaysOnTop(QMainWindow *window, bool enable)
void SetAlwaysOnTop(QWidget *window, bool enable)
{
Qt::WindowFlags flags = window->windowFlags();
......
......@@ -203,13 +203,13 @@ void SetAeroEnabled(bool enable)
func(enable ? DWM_EC_ENABLECOMPOSITION : DWM_EC_DISABLECOMPOSITION);
}
bool IsAlwaysOnTop(QMainWindow *window)
bool IsAlwaysOnTop(QWidget *window)
{
DWORD exStyle = GetWindowLong((HWND)window->winId(), GWL_EXSTYLE);
return (exStyle & WS_EX_TOPMOST) != 0;
}
void SetAlwaysOnTop(QMainWindow *window, bool enable)
void SetAlwaysOnTop(QWidget *window, bool enable)
{
HWND hwnd = (HWND)window->winId();
SetWindowPos(hwnd, enable ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0,
......
......@@ -148,12 +148,12 @@ vector<string> GetPreferredLocales()
return {};
}
bool IsAlwaysOnTop(QMainWindow *window)
bool IsAlwaysOnTop(QWidget *window)
{
return (window->windowFlags() & Qt::WindowStaysOnTopHint) != 0;
}
void SetAlwaysOnTop(QMainWindow *window, bool enable)
void SetAlwaysOnTop(QWidget *window, bool enable)
{
Qt::WindowFlags flags = window->windowFlags();
......
......@@ -22,7 +22,7 @@
#include <string>
#include <vector>
class QMainWindow;
class QWidget;
struct MonitorInfo {
int32_t x, y;
......@@ -45,8 +45,8 @@ std::string GetDefaultVideoSavePath();
std::vector<std::string> GetPreferredLocales();
bool IsAlwaysOnTop(QMainWindow *window);
void SetAlwaysOnTop(QMainWindow *window, bool enable);
bool IsAlwaysOnTop(QWidget *window);
void SetAlwaysOnTop(QWidget *window, bool enable);
#ifdef _WIN32
uint32_t GetWindowsVersion();
......
......@@ -272,6 +272,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->warnBeforeStreamStart,CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->warnBeforeStreamStop, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->hideProjectorCursor, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->projectorAlwaysOnTop, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->recordWhenStreaming, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->keepRecordStreamStops,CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->systemTrayEnabled, CHECK_CHANGED, GENERAL_CHANGED);
......@@ -887,6 +888,10 @@ void OBSBasicSettings::LoadGeneralSettings()
"BasicWindow", "HideProjectorCursor");
ui->hideProjectorCursor->setChecked(hideProjectorCursor);
bool projectorAlwaysOnTop = config_get_bool(GetGlobalConfig(),
"BasicWindow", "ProjectorAlwaysOnTop");
ui->projectorAlwaysOnTop->setChecked(projectorAlwaysOnTop);
loading = false;
}
......@@ -2236,6 +2241,9 @@ void OBSBasicSettings::SaveGeneralSettings()
config_set_bool(GetGlobalConfig(), "BasicWindow",
"HideProjectorCursor",
ui->hideProjectorCursor->isChecked());
config_set_bool(GetGlobalConfig(), "BasicWindow",
"ProjectorAlwaysOnTop",
ui->projectorAlwaysOnTop->isChecked());
if (WidgetChanged(ui->recordWhenStreaming))
config_set_bool(GetGlobalConfig(), "BasicWindow",
......
......@@ -53,6 +53,11 @@ void OBSProjector::Init(int monitor)
setGeometry(mi.x, mi.y, mi.cx, mi.cy);
bool alwaysOnTop = config_get_bool(GetGlobalConfig(),
"BasicWindow", "ProjectorAlwaysOnTop");
if (alwaysOnTop)
SetAlwaysOnTop(this, true);
show();
if (source)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册