diff options
Diffstat (limited to 'src/Ryujinx')
-rw-r--r-- | src/Ryujinx/Program.cs | 16 | ||||
-rw-r--r-- | src/Ryujinx/Ui/RendererWidgetBase.cs | 59 | ||||
-rw-r--r-- | src/Ryujinx/Ui/Windows/SettingsWindow.cs | 32 | ||||
-rw-r--r-- | src/Ryujinx/Ui/Windows/SettingsWindow.glade | 78 |
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> |