From 1c38ac8813db2b900f938ef28f895d0f3a6f5d29 Mon Sep 17 00:00:00 2001 From: Xpl0itR Date: Tue, 18 Feb 2020 12:31:41 +0000 Subject: [PATCH] Move status information from the title bar to the new status bar --- Ryujinx/Ui/GLRenderer.cs | 36 +++++++++++--------------------- Ryujinx/Ui/MainWindow.cs | 34 +++++++++++++++++++++++++++--- Ryujinx/Ui/MainWindow.glade | 41 +++++++++++++++++++++++++++++++++++-- 3 files changed, 82 insertions(+), 29 deletions(-) diff --git a/Ryujinx/Ui/GLRenderer.cs b/Ryujinx/Ui/GLRenderer.cs index b8f9377c20..8c3bbfac0a 100644 --- a/Ryujinx/Ui/GLRenderer.cs +++ b/Ryujinx/Ui/GLRenderer.cs @@ -24,6 +24,8 @@ namespace Ryujinx.Ui public ManualResetEvent WaitEvent { get; set; } + public static event EventHandler<(bool, string)> StatusUpdatedEvent; + public bool IsActive { get; set; } public bool IsStopped { get; set; } public bool IsFocused { get; set; } @@ -32,12 +34,8 @@ namespace Ryujinx.Ui private double _mouseY; private bool _mousePressed; - private bool _titleEvent; - private bool _toggleFullscreen; - private string _newTitle; - private readonly long _ticksPerFrame; private long _ticks = 0; @@ -179,6 +177,14 @@ namespace Ryujinx.Ui Gtk.Application.Invoke(delegate { parent.Present(); + + string titleNameSection = string.IsNullOrWhiteSpace(_device.System.TitleName) ? string.Empty + : " | " + _device.System.TitleName; + + string titleIdSection = string.IsNullOrWhiteSpace(_device.System.TitleIdText) ? string.Empty + : " | " + _device.System.TitleIdText.ToUpper(); + + parent.Title = $"Ryujinx {Program.Version}{titleNameSection}{titleIdSection}"; }); Thread renderLoopThread = new Thread(Render) @@ -321,17 +327,9 @@ namespace Ryujinx.Ui double hostFps = _device.Statistics.GetSystemFrameRate(); double gameFps = _device.Statistics.GetGameFrameRate(); + string status = $"| Host FPS: {hostFps:0.0} | Game FPS: {gameFps:0.0}"; - string titleNameSection = string.IsNullOrWhiteSpace(_device.System.TitleName) ? string.Empty - : " | " + _device.System.TitleName; - - string titleIdSection = string.IsNullOrWhiteSpace(_device.System.TitleIdText) ? string.Empty - : " | " + _device.System.TitleIdText.ToUpper(); - - _newTitle = $"Ryujinx {Program.Version}{titleNameSection}{titleIdSection} | Host FPS: {hostFps:0.0} | Game FPS: {gameFps:0.0} | " + - $"Game Vsync: {(_device.EnableDeviceVsync ? "On" : "Off")}"; - - _titleEvent = true; + StatusUpdatedEvent?.Invoke(this, (_device.EnableDeviceVsync, status)); _device.System.SignalVsync(); @@ -351,16 +349,6 @@ namespace Ryujinx.Ui { while (IsActive) { - if (_titleEvent) - { - _titleEvent = false; - - Gtk.Application.Invoke(delegate - { - this.ParentWindow.Title = _newTitle; - }); - } - UpdateFrame(); // Polling becomes expensive if it's not slept diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs index 51b40b9468..972937fa04 100644 --- a/Ryujinx/Ui/MainWindow.cs +++ b/Ryujinx/Ui/MainWindow.cs @@ -51,6 +51,7 @@ namespace Ryujinx.Ui [GUI] MenuBar _menuBar; [GUI] Box _footerBox; [GUI] MenuItem _fullScreen; + [GUI] Box _statusBar; [GUI] MenuItem _stopEmulation; [GUI] CheckMenuItem _favToggle; [GUI] MenuItem _firmwareInstallFile; @@ -64,6 +65,7 @@ namespace Ryujinx.Ui [GUI] CheckMenuItem _lastPlayedToggle; [GUI] CheckMenuItem _fileExtToggle; [GUI] CheckMenuItem _fileSizeToggle; + [GUI] Label _fpsStatus; [GUI] CheckMenuItem _pathToggle; [GUI] TreeView _gameTable; [GUI] ScrolledWindow _gameTableWindow; @@ -72,6 +74,7 @@ namespace Ryujinx.Ui [GUI] Label _firmwareVersionLabel; [GUI] LevelBar _progressBar; [GUI] Box _viewBox; + [GUI] Label _vSyncStatus; [GUI] Box _listStatusBox; #pragma warning restore CS0649 @@ -87,6 +90,7 @@ namespace Ryujinx.Ui ApplicationLibrary.ApplicationAdded += Application_Added; ApplicationLibrary.ApplicationCountUpdated += ApplicationCount_Updated; + GLRenderer.StatusUpdatedEvent += Update_StatusBar; _gameTable.ButtonReleaseEvent += Row_Clicked; @@ -451,12 +455,15 @@ namespace Ryujinx.Ui private void RecreateFooterForMenu() { - _footerBox.Add(_listStatusBox); + _listStatusBox.Show(); + + _fpsStatus.Text = ""; + _vSyncStatus.Text = ""; } private void ClearFooterForGameRender() { - _footerBox.Remove(_listStatusBox); + _listStatusBox.Hide(); } public void ToggleExtraWidgets(bool show) @@ -466,7 +473,8 @@ namespace Ryujinx.Ui if (show) { _menuBar.ShowAll(); - _footerBox.ShowAll(); + _footerBox.Show(); + _statusBar.Show(); } else { @@ -590,6 +598,26 @@ namespace Ryujinx.Ui }); } + private void Update_StatusBar(object sender, (bool vSync, string fps) status) + { + Application.Invoke(delegate + { + _vSyncStatus.Text = status.vSync ? "VSync On" : "VSync Off"; + _fpsStatus.Text = status.fps; + + if (status.vSync) + { + _vSyncStatus.Attributes = new Pango.AttrList(); + _vSyncStatus.Attributes.Insert(new Pango.AttrForeground(0, ushort.MaxValue, 0)); + } + else + { + _vSyncStatus.Attributes = new Pango.AttrList(); + _vSyncStatus.Attributes.Insert(new Pango.AttrForeground(ushort.MaxValue, 0, 0)); + } + }); + } + private void FavToggle_Toggled(object sender, ToggledArgs args) { _tableStore.GetIter(out TreeIter treeIter, new TreePath(args.Path)); diff --git a/Ryujinx/Ui/MainWindow.glade b/Ryujinx/Ui/MainWindow.glade index 67bfdf0cde..9c8a819de0 100644 --- a/Ryujinx/Ui/MainWindow.glade +++ b/Ryujinx/Ui/MainWindow.glade @@ -399,10 +399,10 @@ - True - False 1280 19 + True + False True @@ -460,6 +460,43 @@ + + False + True + 0 + + + + + True + False + + + True + False + 10 + + + False + True + 0 + + + + + True + False + start + 5 + 10 + + + True + True + 1 + + + True True