aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx')
-rw-r--r--src/Ryujinx/Program.cs16
-rw-r--r--src/Ryujinx/Ui/RendererWidgetBase.cs59
-rw-r--r--src/Ryujinx/Ui/Windows/SettingsWindow.cs32
-rw-r--r--src/Ryujinx/Ui/Windows/SettingsWindow.glade78
4 files changed, 151 insertions, 34 deletions
diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs
index 2e6ede44..836483d8 100644
--- a/src/Ryujinx/Program.cs
+++ b/src/Ryujinx/Program.cs
@@ -209,7 +209,7 @@ namespace Ryujinx
}
}
- // Check if graphics backend was overridden
+ // Check if graphics backend was overridden.
if (CommandLineState.OverrideGraphicsBackend != null)
{
if (CommandLineState.OverrideGraphicsBackend.ToLower() == "opengl")
@@ -224,7 +224,19 @@ namespace Ryujinx
}
}
- // Check if docked mode was overriden.
+ // Check if HideCursor was overridden.
+ if (CommandLineState.OverrideHideCursor is not null)
+ {
+ ConfigurationState.Instance.HideCursor.Value = CommandLineState.OverrideHideCursor!.ToLower() switch
+ {
+ "never" => HideCursorMode.Never,
+ "onidle" => HideCursorMode.OnIdle,
+ "always" => HideCursorMode.Always,
+ _ => ConfigurationState.Instance.HideCursor.Value
+ };
+ }
+
+ // Check if docked mode was overridden.
if (CommandLineState.OverrideDockedMode.HasValue)
{
ConfigurationState.Instance.System.EnableDockedMode.Value = CommandLineState.OverrideDockedMode.Value;
diff --git a/src/Ryujinx/Ui/RendererWidgetBase.cs b/src/Ryujinx/Ui/RendererWidgetBase.cs
index 65afa6e4..0fa7240b 100644
--- a/src/Ryujinx/Ui/RendererWidgetBase.cs
+++ b/src/Ryujinx/Ui/RendererWidgetBase.cs
@@ -72,7 +72,7 @@ namespace Ryujinx.Ui
const int CursorHideIdleTime = 5; // seconds
private static readonly Cursor _invisibleCursor = new Cursor(Display.Default, CursorType.BlankCursor);
private long _lastCursorMoveTime;
- private bool _hideCursorOnIdle;
+ private HideCursorMode _hideCursorMode;
private InputManager _inputManager;
private IKeyboard _keyboardInterface;
private GraphicsDebugLevel _glLogLevel;
@@ -113,10 +113,10 @@ namespace Ryujinx.Ui
_gpuCancellationTokenSource = new CancellationTokenSource();
- _hideCursorOnIdle = ConfigurationState.Instance.HideCursorOnIdle;
+ _hideCursorMode = ConfigurationState.Instance.HideCursor;
_lastCursorMoveTime = Stopwatch.GetTimestamp();
- ConfigurationState.Instance.HideCursorOnIdle.Event += HideCursorStateChanged;
+ ConfigurationState.Instance.HideCursor.Event += HideCursorStateChanged;
ConfigurationState.Instance.Graphics.AntiAliasing.Event += UpdateAnriAliasing;
ConfigurationState.Instance.Graphics.ScalingFilter.Event += UpdateScalingFilter;
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event += UpdateScalingFilterLevel;
@@ -145,26 +145,32 @@ namespace Ryujinx.Ui
return Renderer.GetHardwareInfo().GpuVendor;
}
- private void HideCursorStateChanged(object sender, ReactiveEventArgs<bool> state)
+ private void HideCursorStateChanged(object sender, ReactiveEventArgs<HideCursorMode> state)
{
Application.Invoke(delegate
{
- _hideCursorOnIdle = state.NewValue;
+ _hideCursorMode = state.NewValue;
- if (_hideCursorOnIdle)
+ switch (_hideCursorMode)
{
- _lastCursorMoveTime = Stopwatch.GetTimestamp();
- }
- else
- {
- Window.Cursor = null;
+ case HideCursorMode.Never:
+ Window.Cursor = null;
+ break;
+ case HideCursorMode.OnIdle:
+ _lastCursorMoveTime = Stopwatch.GetTimestamp();
+ break;
+ case HideCursorMode.Always:
+ Window.Cursor = _invisibleCursor;
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
}
});
}
private void Renderer_Destroyed(object sender, EventArgs e)
{
- ConfigurationState.Instance.HideCursorOnIdle.Event -= HideCursorStateChanged;
+ ConfigurationState.Instance.HideCursor.Event -= HideCursorStateChanged;
ConfigurationState.Instance.Graphics.AntiAliasing.Event -= UpdateAnriAliasing;
ConfigurationState.Instance.Graphics.ScalingFilter.Event -= UpdateScalingFilter;
ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event -= UpdateScalingFilterLevel;
@@ -180,7 +186,7 @@ namespace Ryujinx.Ui
protected override bool OnMotionNotifyEvent(EventMotion evnt)
{
- if (_hideCursorOnIdle)
+ if (_hideCursorMode == HideCursorMode.OnIdle)
{
_lastCursorMoveTime = Stopwatch.GetTimestamp();
}
@@ -315,15 +321,28 @@ namespace Ryujinx.Ui
_toggleDockedMode = toggleDockedMode;
- if (_hideCursorOnIdle && !ConfigurationState.Instance.Hid.EnableMouse)
+ if (ConfigurationState.Instance.Hid.EnableMouse.Value)
{
- long cursorMoveDelta = Stopwatch.GetTimestamp() - _lastCursorMoveTime;
- Window.Cursor = (cursorMoveDelta >= CursorHideIdleTime * Stopwatch.Frequency) ? _invisibleCursor : null;
+ if (_isMouseInClient)
+ {
+ Window.Cursor = _invisibleCursor;
+ }
}
-
- if (ConfigurationState.Instance.Hid.EnableMouse && _isMouseInClient)
+ else
{
- Window.Cursor = _invisibleCursor;
+ switch (_hideCursorMode)
+ {
+ case HideCursorMode.OnIdle:
+ long cursorMoveDelta = Stopwatch.GetTimestamp() - _lastCursorMoveTime;
+ Window.Cursor = (cursorMoveDelta >= CursorHideIdleTime * Stopwatch.Frequency) ? _invisibleCursor : null;
+ break;
+ case HideCursorMode.Always:
+ Window.Cursor = _invisibleCursor;
+ break;
+ case HideCursorMode.Never:
+ Window.Cursor = null;
+ break;
+ }
}
}
@@ -775,4 +794,4 @@ namespace Ryujinx.Ui
return state;
}
}
-}
+} \ No newline at end of file
diff --git a/src/Ryujinx/Ui/Windows/SettingsWindow.cs b/src/Ryujinx/Ui/Windows/SettingsWindow.cs
index 27080bda..3fb0447d 100644
--- a/src/Ryujinx/Ui/Windows/SettingsWindow.cs
+++ b/src/Ryujinx/Ui/Windows/SettingsWindow.cs
@@ -52,7 +52,9 @@ namespace Ryujinx.Ui.Windows
[GUI] CheckButton _discordToggle;
[GUI] CheckButton _checkUpdatesToggle;
[GUI] CheckButton _showConfirmExitToggle;
- [GUI] CheckButton _hideCursorOnIdleToggle;
+ [GUI] RadioButton _hideCursorNever;
+ [GUI] RadioButton _hideCursorOnIdle;
+ [GUI] RadioButton _hideCursorAlways;
[GUI] CheckButton _vSyncToggle;
[GUI] CheckButton _shaderCacheToggle;
[GUI] CheckButton _textureRecompressionToggle;
@@ -226,9 +228,17 @@ namespace Ryujinx.Ui.Windows
_showConfirmExitToggle.Click();
}
- if (ConfigurationState.Instance.HideCursorOnIdle)
+ switch (ConfigurationState.Instance.HideCursor.Value)
{
- _hideCursorOnIdleToggle.Click();
+ case HideCursorMode.Never:
+ _hideCursorNever.Click();
+ break;
+ case HideCursorMode.OnIdle:
+ _hideCursorOnIdle.Click();
+ break;
+ case HideCursorMode.Always:
+ _hideCursorAlways.Click();
+ break;
}
if (ConfigurationState.Instance.Graphics.EnableVsync)
@@ -560,6 +570,18 @@ namespace Ryujinx.Ui.Windows
_directoryChanged = false;
}
+ HideCursorMode hideCursor = HideCursorMode.Never;
+
+ if (_hideCursorOnIdle.Active)
+ {
+ hideCursor = HideCursorMode.OnIdle;
+ }
+
+ if (_hideCursorAlways.Active)
+ {
+ hideCursor = HideCursorMode.Always;
+ }
+
if (!float.TryParse(_resScaleText.Buffer.Text, out float resScaleCustom) || resScaleCustom <= 0.0f)
{
resScaleCustom = 1.0f;
@@ -602,7 +624,7 @@ namespace Ryujinx.Ui.Windows
ConfigurationState.Instance.EnableDiscordIntegration.Value = _discordToggle.Active;
ConfigurationState.Instance.CheckUpdatesOnStart.Value = _checkUpdatesToggle.Active;
ConfigurationState.Instance.ShowConfirmExit.Value = _showConfirmExitToggle.Active;
- ConfigurationState.Instance.HideCursorOnIdle.Value = _hideCursorOnIdleToggle.Active;
+ ConfigurationState.Instance.HideCursor.Value = hideCursor;
ConfigurationState.Instance.Graphics.EnableVsync.Value = _vSyncToggle.Active;
ConfigurationState.Instance.Graphics.EnableShaderCache.Value = _shaderCacheToggle.Active;
ConfigurationState.Instance.Graphics.EnableTextureRecompression.Value = _textureRecompressionToggle.Active;
@@ -813,4 +835,4 @@ namespace Ryujinx.Ui.Windows
Dispose();
}
}
-}
+} \ No newline at end of file
diff --git a/src/Ryujinx/Ui/Windows/SettingsWindow.glade b/src/Ryujinx/Ui/Windows/SettingsWindow.glade
index 8ae6ea72..0caa477b 100644
--- a/src/Ryujinx/Ui/Windows/SettingsWindow.glade
+++ b/src/Ryujinx/Ui/Windows/SettingsWindow.glade
@@ -160,19 +160,83 @@
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="_hideCursorOnIdleToggle">
- <property name="label" translatable="yes">Hide Cursor On Idle</property>
+ <object class="GtkBox" id="_hideCursorBox">
<property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">False</property>
- <property name="halign">start</property>
- <property name="draw-indicator">True</property>
+ <property name="can-focus">False</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Hide Cursor:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">5</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="_hideCursorNever">
+ <property name="label" translatable="yes">Never</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="active">True</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="_hideCursorOnIdle">
+ <property name="label" translatable="yes">On Idle</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">_hideCursorNever</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="_hideCursorAlways">
+ <property name="label" translatable="yes">Always</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="draw-indicator">True</property>
+ <property name="group">_hideCursorNever</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
- <property name="position">3</property>
+ <property name="position">4</property>
</packing>
</child>
</object>