mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2026-06-15 21:22:40 +00:00
Add support for Fullscreen UI in Moonlight (#492)
* initial UI and window decoration removal toggle * revert default height change * add fullscreen support to kiosk mode * add tool tip for kiosk mode * change to fullscreen rather than kiosk * update to Fullscreen instead of Full-screen or Full Screen * update UI text * convert to display mode picker * add UI label for picker * clean up references to startMaximized and fullScreenUIMode * remove flags property, as fullscreen visiblity handles this already * use Maximized in selection text * account for running moonlight without a window manager * lock display mode from being changed if there is no window manager running Co-authored-by: jmt-gh <jmt-gh@users.noreply.github.com>
This commit is contained in:
@@ -551,7 +551,7 @@ Flickable {
|
|||||||
model: ListModel {
|
model: ListModel {
|
||||||
id: windowModeListModel
|
id: windowModeListModel
|
||||||
ListElement {
|
ListElement {
|
||||||
text: qsTr("Full-screen")
|
text: qsTr("Fullscreen")
|
||||||
val: StreamingPreferences.WM_FULLSCREEN
|
val: StreamingPreferences.WM_FULLSCREEN
|
||||||
}
|
}
|
||||||
ListElement {
|
ListElement {
|
||||||
@@ -570,7 +570,7 @@ Flickable {
|
|||||||
ToolTip.delay: 1000
|
ToolTip.delay: 1000
|
||||||
ToolTip.timeout: 5000
|
ToolTip.timeout: 5000
|
||||||
ToolTip.visible: hovered
|
ToolTip.visible: hovered
|
||||||
ToolTip.text: qsTr("Full-screen generally provides the best performance, but borderless windowed may work better with features like macOS Spaces, Alt+Tab, screenshot tools, on-screen overlays, etc.")
|
ToolTip.text: qsTr("Fullscreen generally provides the best performance, but borderless windowed may work better with features like macOS Spaces, Alt+Tab, screenshot tools, on-screen overlays, etc.")
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckBox {
|
CheckBox {
|
||||||
@@ -713,15 +713,50 @@ Flickable {
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
spacing: 5
|
spacing: 5
|
||||||
|
|
||||||
CheckBox {
|
Label {
|
||||||
id: startMaximizedCheck
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
text: qsTr("Maximize Moonlight window on startup")
|
id: uiDisplayModeTitle
|
||||||
|
text: qsTr("Display Mode")
|
||||||
font.pointSize: 12
|
font.pointSize: 12
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
}
|
||||||
|
|
||||||
|
AutoResizingComboBox {
|
||||||
|
// ignore setting the index at first, and actually set it when the component is loaded
|
||||||
|
Component.onCompleted: {
|
||||||
|
var saved_uidisplaymode = StreamingPreferences.uiDisplayMode
|
||||||
|
currentIndex = 0
|
||||||
|
for (var i = 0; i < uiDisplayModeListModel.count; i++) {
|
||||||
|
var el_uidisplaymode = uiDisplayModeListModel.get(i).val;
|
||||||
|
if (saved_uidisplaymode === el_uidisplaymode) {
|
||||||
|
currentIndex = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activated(currentIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
id: uiDisplayModeComboBox
|
||||||
enabled: SystemProperties.hasWindowManager
|
enabled: SystemProperties.hasWindowManager
|
||||||
checked: !StreamingPreferences.startWindowed || !SystemProperties.hasWindowManager
|
textRole: "text"
|
||||||
onCheckedChanged: {
|
model: ListModel {
|
||||||
StreamingPreferences.startWindowed = !checked
|
id: uiDisplayModeListModel
|
||||||
|
ListElement {
|
||||||
|
text: qsTr("Windowed")
|
||||||
|
val: StreamingPreferences.UI_WINDOWED
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: qsTr("Maximized")
|
||||||
|
val: StreamingPreferences.UI_FULLSCREEN_WINDOWED
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: qsTr("Fullscreen")
|
||||||
|
val: StreamingPreferences.UI_FULLSCREEN
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ::onActivated must be used, as it only listens for when the index is changed by a human
|
||||||
|
onActivated : {
|
||||||
|
StreamingPreferences.uiDisplayMode = uiDisplayModeListModel.get(currentIndex).val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-2
@@ -17,8 +17,16 @@ ApplicationWindow {
|
|||||||
width: 1280
|
width: 1280
|
||||||
height: 600
|
height: 600
|
||||||
|
|
||||||
visibility: (SystemProperties.hasWindowManager && StreamingPreferences.startWindowed) ? "Windowed" : "Maximized"
|
visibility: {
|
||||||
|
if (SystemProperties.hasWindowManager) {
|
||||||
|
if (StreamingPreferences.uiDisplayMode == StreamingPreferences.UI_WINDOWED) return "Windowed"
|
||||||
|
else if (StreamingPreferences.uiDisplayMode == StreamingPreferences.UI_FULLSCREEN_WINDOWED) return "Maximized"
|
||||||
|
else if (StreamingPreferences.uiDisplayMode == StreamingPreferences.UI_FULLSCREEN) return "FullScreen"
|
||||||
|
} else {
|
||||||
|
return "Maximized"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This configures the maximum width of the singleton attached QML ToolTip. If left unconstrained,
|
// This configures the maximum width of the singleton attached QML ToolTip. If left unconstrained,
|
||||||
// it will never insert a line break and just extend on forever.
|
// it will never insert a line break and just extend on forever.
|
||||||
ToolTip.toolTip.contentWidth: ToolTip.toolTip.implicitContentWidth < 400 ? ToolTip.toolTip.implicitContentWidth : 400
|
ToolTip.toolTip.contentWidth: ToolTip.toolTip.implicitContentWidth < 400 ? ToolTip.toolTip.implicitContentWidth : 400
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
#define SER_QUITAPPAFTER "quitAppAfter"
|
#define SER_QUITAPPAFTER "quitAppAfter"
|
||||||
#define SER_ABSMOUSEMODE "mouseacceleration"
|
#define SER_ABSMOUSEMODE "mouseacceleration"
|
||||||
#define SER_ABSTOUCHMODE "abstouchmode"
|
#define SER_ABSTOUCHMODE "abstouchmode"
|
||||||
#define SER_STARTWINDOWED "startwindowed"
|
|
||||||
#define SER_FRAMEPACING "framepacing"
|
#define SER_FRAMEPACING "framepacing"
|
||||||
#define SER_CONNWARNINGS "connwarnings"
|
#define SER_CONNWARNINGS "connwarnings"
|
||||||
|
#define SER_UIDISPLAYMODE "uidisplaymode"
|
||||||
#define SER_RICHPRESENCE "richpresence"
|
#define SER_RICHPRESENCE "richpresence"
|
||||||
#define SER_GAMEPADMOUSE "gamepadmouse"
|
#define SER_GAMEPADMOUSE "gamepadmouse"
|
||||||
#define SER_DEFAULTVER "defaultver"
|
#define SER_DEFAULTVER "defaultver"
|
||||||
@@ -68,7 +68,6 @@ void StreamingPreferences::reload()
|
|||||||
quitAppAfter = settings.value(SER_QUITAPPAFTER, false).toBool();
|
quitAppAfter = settings.value(SER_QUITAPPAFTER, false).toBool();
|
||||||
absoluteMouseMode = settings.value(SER_ABSMOUSEMODE, false).toBool();
|
absoluteMouseMode = settings.value(SER_ABSMOUSEMODE, false).toBool();
|
||||||
absoluteTouchMode = settings.value(SER_ABSTOUCHMODE, true).toBool();
|
absoluteTouchMode = settings.value(SER_ABSTOUCHMODE, true).toBool();
|
||||||
startWindowed = settings.value(SER_STARTWINDOWED, true).toBool();
|
|
||||||
framePacing = settings.value(SER_FRAMEPACING, false).toBool();
|
framePacing = settings.value(SER_FRAMEPACING, false).toBool();
|
||||||
connectionWarnings = settings.value(SER_CONNWARNINGS, true).toBool();
|
connectionWarnings = settings.value(SER_CONNWARNINGS, true).toBool();
|
||||||
richPresence = settings.value(SER_RICHPRESENCE, true).toBool();
|
richPresence = settings.value(SER_RICHPRESENCE, true).toBool();
|
||||||
@@ -90,6 +89,9 @@ void StreamingPreferences::reload()
|
|||||||
// Try to load from the old preference value too
|
// Try to load from the old preference value too
|
||||||
static_cast<int>(settings.value(SER_FULLSCREEN, true).toBool() ?
|
static_cast<int>(settings.value(SER_FULLSCREEN, true).toBool() ?
|
||||||
recommendedFullScreenMode : WindowMode::WM_WINDOWED)).toInt());
|
recommendedFullScreenMode : WindowMode::WM_WINDOWED)).toInt());
|
||||||
|
uiDisplayMode = static_cast<UIDisplayMode>(settings.value(SER_UIDISPLAYMODE,
|
||||||
|
static_cast<int>(UIDisplayMode::UI_WINDOWED)).toInt());
|
||||||
|
|
||||||
|
|
||||||
// Perform default settings updates as required based on last default version
|
// Perform default settings updates as required based on last default version
|
||||||
if (defaultVer == 0) {
|
if (defaultVer == 0) {
|
||||||
@@ -119,7 +121,6 @@ void StreamingPreferences::save()
|
|||||||
settings.setValue(SER_QUITAPPAFTER, quitAppAfter);
|
settings.setValue(SER_QUITAPPAFTER, quitAppAfter);
|
||||||
settings.setValue(SER_ABSMOUSEMODE, absoluteMouseMode);
|
settings.setValue(SER_ABSMOUSEMODE, absoluteMouseMode);
|
||||||
settings.setValue(SER_ABSTOUCHMODE, absoluteTouchMode);
|
settings.setValue(SER_ABSTOUCHMODE, absoluteTouchMode);
|
||||||
settings.setValue(SER_STARTWINDOWED, startWindowed);
|
|
||||||
settings.setValue(SER_FRAMEPACING, framePacing);
|
settings.setValue(SER_FRAMEPACING, framePacing);
|
||||||
settings.setValue(SER_CONNWARNINGS, connectionWarnings);
|
settings.setValue(SER_CONNWARNINGS, connectionWarnings);
|
||||||
settings.setValue(SER_RICHPRESENCE, richPresence);
|
settings.setValue(SER_RICHPRESENCE, richPresence);
|
||||||
@@ -130,6 +131,7 @@ void StreamingPreferences::save()
|
|||||||
settings.setValue(SER_VIDEOCFG, static_cast<int>(videoCodecConfig));
|
settings.setValue(SER_VIDEOCFG, static_cast<int>(videoCodecConfig));
|
||||||
settings.setValue(SER_VIDEODEC, static_cast<int>(videoDecoderSelection));
|
settings.setValue(SER_VIDEODEC, static_cast<int>(videoDecoderSelection));
|
||||||
settings.setValue(SER_WINDOWMODE, static_cast<int>(windowMode));
|
settings.setValue(SER_WINDOWMODE, static_cast<int>(windowMode));
|
||||||
|
settings.setValue(SER_UIDISPLAYMODE, static_cast<int>(uiDisplayMode));
|
||||||
settings.setValue(SER_DEFAULTVER, CURRENT_DEFAULT_VER);
|
settings.setValue(SER_DEFAULTVER, CURRENT_DEFAULT_VER);
|
||||||
settings.setValue(SER_SWAPMOUSEBUTTONS, swapMouseButtons);
|
settings.setValue(SER_SWAPMOUSEBUTTONS, swapMouseButtons);
|
||||||
settings.setValue(SER_MUTEONFOCUSLOSS, muteOnFocusLoss);
|
settings.setValue(SER_MUTEONFOCUSLOSS, muteOnFocusLoss);
|
||||||
|
|||||||
@@ -50,6 +50,14 @@ public:
|
|||||||
};
|
};
|
||||||
Q_ENUM(WindowMode)
|
Q_ENUM(WindowMode)
|
||||||
|
|
||||||
|
enum UIDisplayMode
|
||||||
|
{
|
||||||
|
UI_WINDOWED,
|
||||||
|
UI_FULLSCREEN_WINDOWED,
|
||||||
|
UI_FULLSCREEN
|
||||||
|
};
|
||||||
|
Q_ENUM(UIDisplayMode)
|
||||||
|
|
||||||
Q_PROPERTY(int width MEMBER width NOTIFY displayModeChanged)
|
Q_PROPERTY(int width MEMBER width NOTIFY displayModeChanged)
|
||||||
Q_PROPERTY(int height MEMBER height NOTIFY displayModeChanged)
|
Q_PROPERTY(int height MEMBER height NOTIFY displayModeChanged)
|
||||||
Q_PROPERTY(int fps MEMBER fps NOTIFY displayModeChanged)
|
Q_PROPERTY(int fps MEMBER fps NOTIFY displayModeChanged)
|
||||||
@@ -63,7 +71,6 @@ public:
|
|||||||
Q_PROPERTY(bool quitAppAfter MEMBER quitAppAfter NOTIFY quitAppAfterChanged)
|
Q_PROPERTY(bool quitAppAfter MEMBER quitAppAfter NOTIFY quitAppAfterChanged)
|
||||||
Q_PROPERTY(bool absoluteMouseMode MEMBER absoluteMouseMode NOTIFY absoluteMouseModeChanged)
|
Q_PROPERTY(bool absoluteMouseMode MEMBER absoluteMouseMode NOTIFY absoluteMouseModeChanged)
|
||||||
Q_PROPERTY(bool absoluteTouchMode MEMBER absoluteTouchMode NOTIFY absoluteTouchModeChanged)
|
Q_PROPERTY(bool absoluteTouchMode MEMBER absoluteTouchMode NOTIFY absoluteTouchModeChanged)
|
||||||
Q_PROPERTY(bool startWindowed MEMBER startWindowed NOTIFY startWindowedChanged)
|
|
||||||
Q_PROPERTY(bool framePacing MEMBER framePacing NOTIFY framePacingChanged)
|
Q_PROPERTY(bool framePacing MEMBER framePacing NOTIFY framePacingChanged)
|
||||||
Q_PROPERTY(bool connectionWarnings MEMBER connectionWarnings NOTIFY connectionWarningsChanged)
|
Q_PROPERTY(bool connectionWarnings MEMBER connectionWarnings NOTIFY connectionWarningsChanged)
|
||||||
Q_PROPERTY(bool richPresence MEMBER richPresence NOTIFY richPresenceChanged)
|
Q_PROPERTY(bool richPresence MEMBER richPresence NOTIFY richPresenceChanged)
|
||||||
@@ -74,6 +81,7 @@ public:
|
|||||||
Q_PROPERTY(VideoDecoderSelection videoDecoderSelection MEMBER videoDecoderSelection NOTIFY videoDecoderSelectionChanged)
|
Q_PROPERTY(VideoDecoderSelection videoDecoderSelection MEMBER videoDecoderSelection NOTIFY videoDecoderSelectionChanged)
|
||||||
Q_PROPERTY(WindowMode windowMode MEMBER windowMode NOTIFY windowModeChanged)
|
Q_PROPERTY(WindowMode windowMode MEMBER windowMode NOTIFY windowModeChanged)
|
||||||
Q_PROPERTY(WindowMode recommendedFullScreenMode MEMBER recommendedFullScreenMode CONSTANT)
|
Q_PROPERTY(WindowMode recommendedFullScreenMode MEMBER recommendedFullScreenMode CONSTANT)
|
||||||
|
Q_PROPERTY(UIDisplayMode uiDisplayMode MEMBER uiDisplayMode NOTIFY uiDisplayModeChanged)
|
||||||
Q_PROPERTY(bool swapMouseButtons MEMBER swapMouseButtons NOTIFY mouseButtonsChanged)
|
Q_PROPERTY(bool swapMouseButtons MEMBER swapMouseButtons NOTIFY mouseButtonsChanged)
|
||||||
Q_PROPERTY(bool muteOnFocusLoss MEMBER muteOnFocusLoss NOTIFY muteOnFocusLossChanged)
|
Q_PROPERTY(bool muteOnFocusLoss MEMBER muteOnFocusLoss NOTIFY muteOnFocusLossChanged)
|
||||||
Q_PROPERTY(bool backgroundGamepad MEMBER backgroundGamepad NOTIFY backgroundGamepadChanged)
|
Q_PROPERTY(bool backgroundGamepad MEMBER backgroundGamepad NOTIFY backgroundGamepadChanged)
|
||||||
@@ -94,7 +102,6 @@ public:
|
|||||||
bool quitAppAfter;
|
bool quitAppAfter;
|
||||||
bool absoluteMouseMode;
|
bool absoluteMouseMode;
|
||||||
bool absoluteTouchMode;
|
bool absoluteTouchMode;
|
||||||
bool startWindowed;
|
|
||||||
bool framePacing;
|
bool framePacing;
|
||||||
bool connectionWarnings;
|
bool connectionWarnings;
|
||||||
bool richPresence;
|
bool richPresence;
|
||||||
@@ -111,6 +118,7 @@ public:
|
|||||||
VideoDecoderSelection videoDecoderSelection;
|
VideoDecoderSelection videoDecoderSelection;
|
||||||
WindowMode windowMode;
|
WindowMode windowMode;
|
||||||
WindowMode recommendedFullScreenMode;
|
WindowMode recommendedFullScreenMode;
|
||||||
|
UIDisplayMode uiDisplayMode;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void displayModeChanged();
|
void displayModeChanged();
|
||||||
@@ -127,8 +135,8 @@ signals:
|
|||||||
void audioConfigChanged();
|
void audioConfigChanged();
|
||||||
void videoCodecConfigChanged();
|
void videoCodecConfigChanged();
|
||||||
void videoDecoderSelectionChanged();
|
void videoDecoderSelectionChanged();
|
||||||
|
void uiDisplayModeChanged();
|
||||||
void windowModeChanged();
|
void windowModeChanged();
|
||||||
void startWindowedChanged();
|
|
||||||
void framePacingChanged();
|
void framePacingChanged();
|
||||||
void connectionWarningsChanged();
|
void connectionWarningsChanged();
|
||||||
void richPresenceChanged();
|
void richPresenceChanged();
|
||||||
|
|||||||
Reference in New Issue
Block a user