From 2077a7ae13d71a165eb4c68ae78a92aa1e56ab92 Mon Sep 17 00:00:00 2001 From: Souryo Date: Sat, 15 Apr 2017 15:47:50 -0400 Subject: [PATCH] UI: Added option to display play/record icon when playing/recording movies + option to hide the pause overlay --- Core/EmulationSettings.h | 3 + Core/VideoHud.cpp | 76 +++++++++++++++++- Core/VideoHud.h | 5 +- GUI.NET/Config/PreferenceInfo.cs | 6 ++ GUI.NET/Dependencies/resources.es.xml | 2 + GUI.NET/Dependencies/resources.fr.xml | 2 + GUI.NET/Dependencies/resources.ja.xml | 2 + GUI.NET/Dependencies/resources.pt.xml | 2 + GUI.NET/Dependencies/resources.ru.xml | 2 + GUI.NET/Dependencies/resources.uk.xml | 2 + .../Forms/Config/frmPreferences.Designer.cs | 79 +++++++++++++------ GUI.NET/Forms/Config/frmPreferences.cs | 3 + GUI.NET/InteropEmu.cs | 3 + Linux/SdlRenderer.cpp | 2 +- Windows/Renderer.cpp | 2 +- 15 files changed, 162 insertions(+), 29 deletions(-) diff --git a/Core/EmulationSettings.h b/Core/EmulationSettings.h index 53e65401..6ca1bdb5 100644 --- a/Core/EmulationSettings.h +++ b/Core/EmulationSettings.h @@ -50,6 +50,9 @@ enum EmulationFlags : uint64_t Turbo = 0x2000000000, InBackground = 0x4000000000, NsfPlayerEnabled = 0x8000000000, + + DisplayMovieIcons = 0x10000000000, + HidePauseOverlay = 0x20000000000, }; enum class AudioChannel diff --git a/Core/VideoHud.cpp b/Core/VideoHud.cpp index 4f7ad365..ba6a53aa 100644 --- a/Core/VideoHud.cpp +++ b/Core/VideoHud.cpp @@ -2,6 +2,7 @@ #include "VideoHud.h" #include "ControlManager.h" #include "StandardController.h" +#include "Movie.h" void VideoHud::DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan) { @@ -14,9 +15,11 @@ void VideoHud::DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimen } } } + + DrawMovieIcons(outputBuffer, frameInfo, overscan); } -bool VideoHud::DisplayControllerInput(int inputPort, uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan, uint32_t displayIndex) +bool VideoHud::DisplayControllerInput(int inputPort, uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan, uint32_t displayIndex) { int scale = frameInfo.Width / overscan.GetScreenWidth(); uint32_t* rgbaBuffer = (uint32_t*)outputBuffer; @@ -71,6 +74,47 @@ bool VideoHud::DisplayControllerInput(int inputPort, uint8_t *outputBuffer, Fram return false; } +void VideoHud::DrawMovieIcons(uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan) +{ + if(EmulationSettings::CheckFlag(EmulationFlags::DisplayMovieIcons) && (Movie::Playing() || Movie::Recording())) { + InputDisplaySettings settings = EmulationSettings::GetInputDisplaySettings(); + uint32_t xOffset = settings.VisiblePorts > 0 && settings.DisplayPosition == InputDisplayPosition::TopRight ? 50 : 27; + uint32_t* rgbaBuffer = (uint32_t*)outputBuffer; + int scale = frameInfo.Width / overscan.GetScreenWidth(); + uint32_t yStart = 15 * scale; + uint32_t xStart = (frameInfo.Width - xOffset) * scale; + if(Movie::Playing()) { + for(int y = 0; y < 12 * scale; y++) { + for(int x = 0; x < 12 * scale; x++) { + uint32_t bufferPos = (yStart + y)*frameInfo.Width + (xStart + x); + uint32_t gridValue = _playIcon[y / scale * 12 + x / scale]; + if(gridValue == 1) { + BlendColors(rgbaBuffer + bufferPos, 0xEF00CF00); + } else if(gridValue == 2) { + BlendColors(rgbaBuffer + bufferPos, 0xEF009F00); + } else if(gridValue == 3) { + BlendColors(rgbaBuffer + bufferPos, 0xEF000000); + } + } + } + } else if(Movie::Recording()) { + for(int y = 0; y < 12 * scale; y++) { + for(int x = 0; x < 12 * scale; x++) { + uint32_t bufferPos = (yStart + y)*frameInfo.Width + (xStart + x); + uint32_t gridValue = _recordIcon[y / scale * 12 + x / scale]; + if(gridValue == 1) { + BlendColors(rgbaBuffer + bufferPos, 0xEFCF0000); + } else if(gridValue == 2) { + BlendColors(rgbaBuffer + bufferPos, 0xEF9F0000); + } else if(gridValue == 3) { + BlendColors(rgbaBuffer + bufferPos, 0xEF000000); + } + } + } + } + } +} + void VideoHud::BlendColors(uint32_t* output, uint32_t input) { uint8_t inA = (input >> 24) & 0xFF; @@ -85,6 +129,36 @@ void VideoHud::BlendColors(uint32_t* output, uint32_t input) *output = 0xFF000000 | (outR << 16) | (outG << 8) | outB; } +const vector VideoHud::_playIcon = { + 3,3,3,0,0,0,0,0,0,0,0,0, + 3,1,1,3,3,0,0,0,0,0,0,0, + 3,1,2,1,1,3,3,0,0,0,0,0, + 3,1,2,2,2,1,1,3,3,0,0,0, + 3,1,2,2,2,2,2,1,1,3,0,0, + 3,1,2,2,2,2,2,2,2,1,3,0, + 3,1,2,2,2,2,2,2,2,1,3,0, + 3,1,2,2,2,2,2,1,1,3,0,0, + 3,1,2,2,2,1,1,3,3,0,0,0, + 3,1,2,1,1,3,3,0,0,0,0,0, + 3,1,1,3,3,0,0,0,0,0,0,0, + 3,3,3,0,0,0,0,0,0,0,0,0, +}; + +const vector VideoHud::_recordIcon = { + 0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,3,3,0,0,0,0,0, + 0,0,0,3,3,1,1,3,3,0,0,0, + 0,0,3,1,1,2,2,1,1,3,0,0, + 0,0,3,1,2,2,2,2,1,3,0,0, + 0,3,1,2,2,2,2,2,2,1,3,0, + 0,3,1,2,2,2,2,2,2,1,3,0, + 0,0,3,1,2,2,2,2,1,3,0,0, + 0,0,3,1,1,2,2,1,1,3,0,0, + 0,0,0,3,3,1,1,3,3,0,0,0, + 0,0,0,0,0,3,3,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0, +}; + const vector VideoHud::_gamePads[4] = { { 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9, diff --git a/Core/VideoHud.h b/Core/VideoHud.h index ebd53e7a..6e407761 100644 --- a/Core/VideoHud.h +++ b/Core/VideoHud.h @@ -7,9 +7,12 @@ class VideoHud { private: static const vector _gamePads[4]; + static const vector _playIcon; + static const vector _recordIcon; void BlendColors(uint32_t* output, uint32_t input); - bool DisplayControllerInput(int inputPort, uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan, uint32_t displayIndex); + bool DisplayControllerInput(int inputPort, uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan, uint32_t displayIndex); + void DrawMovieIcons(uint8_t *outputBuffer, FrameInfo &frameInfo, OverscanDimensions &overscan); public: void DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan); diff --git a/GUI.NET/Config/PreferenceInfo.cs b/GUI.NET/Config/PreferenceInfo.cs index 936136dc..cf45ac93 100644 --- a/GUI.NET/Config/PreferenceInfo.cs +++ b/GUI.NET/Config/PreferenceInfo.cs @@ -14,6 +14,9 @@ namespace Mesen.GUI.Config public bool AllowInvalidInput = false; public bool RemoveSpriteLimit = false; + public bool DisplayMovieIcons = false; + public bool HidePauseOverlay = false; + public bool AutoSave = true; public Int32 AutoSaveDelay = 5; public bool AutoSaveNotify = false; @@ -90,6 +93,9 @@ namespace Mesen.GUI.Config InteropEmu.SetFlag(EmulationFlags.PauseWhenInBackground, preferenceInfo.PauseWhenInBackground); InteropEmu.SetFlag(EmulationFlags.DisableGameDatabase, preferenceInfo.DisableGameDatabase); + InteropEmu.SetFlag(EmulationFlags.HidePauseOverlay, preferenceInfo.HidePauseOverlay); + InteropEmu.SetFlag(EmulationFlags.DisplayMovieIcons, preferenceInfo.DisplayMovieIcons); + InteropEmu.NsfSetNsfConfig(preferenceInfo.NsfAutoDetectSilence ? preferenceInfo.NsfAutoDetectSilenceDelay : 0, preferenceInfo.NsfMoveToNextTrackAfterTime ? preferenceInfo.NsfMoveToNextTrackTime : -1, preferenceInfo.NsfDisableApuIrqs); InteropEmu.SetAutoSaveOptions(preferenceInfo.AutoSave ? (uint)preferenceInfo.AutoSaveDelay : 0, preferenceInfo.AutoSaveNotify); InteropEmu.SetEmulatorKeys(new EmulatorKeyMappingSet() { KeySet1 = preferenceInfo.EmulatorKeySet1.Value, KeySet2 = preferenceInfo.EmulatorKeySet2.Value }); diff --git a/GUI.NET/Dependencies/resources.es.xml b/GUI.NET/Dependencies/resources.es.xml index c715be9b..85884a33 100644 --- a/GUI.NET/Dependencies/resources.es.xml +++ b/GUI.NET/Dependencies/resources.es.xml @@ -329,6 +329,8 @@ Permitir entradas aunque Mesen esté en segundo plano Pausar la emulación aunque Mesen esté en segundo plano Cargar los archivos IPS/UPS/BPS automáticamente + Hide the pause screen + Display play/record icon when playing or recording a movie Abrir el directorio de Mesen Asociación de archivos Asociación de archivos diff --git a/GUI.NET/Dependencies/resources.fr.xml b/GUI.NET/Dependencies/resources.fr.xml index 42734ca6..f5de6dcd 100644 --- a/GUI.NET/Dependencies/resources.fr.xml +++ b/GUI.NET/Dependencies/resources.fr.xml @@ -331,6 +331,8 @@ Permettre les entrées lorsque Mesen est en arrière-plan Pauser l'émulation lorsque Mesen est en arrière-plan Charger les fichiers IPS/UPS/BPS automatiquement + Ne pas afficher l'écran de pause + Afficher un icône lors de la lecture ou de l'enregistrement des films Ouvrir le dossier de Mesen Associations de fichiers Associations de fichiers diff --git a/GUI.NET/Dependencies/resources.ja.xml b/GUI.NET/Dependencies/resources.ja.xml index 3cf1c454..db94eb00 100644 --- a/GUI.NET/Dependencies/resources.ja.xml +++ b/GUI.NET/Dependencies/resources.ja.xml @@ -330,6 +330,8 @@ Mesenが最前面ではない時、コントローラは反応しない Mesenが最前面ではない時、自動的にポーズする 自動的にパッチファイル(IPS・UPS)をロードする + ポーズ画面を隠す + 動画の録画や再生の際、アイコンを表示する Mesenのフォルダを開く ファイルの関連付け ファイルの関連付け diff --git a/GUI.NET/Dependencies/resources.pt.xml b/GUI.NET/Dependencies/resources.pt.xml index 4cff83ae..bfc4808c 100644 --- a/GUI.NET/Dependencies/resources.pt.xml +++ b/GUI.NET/Dependencies/resources.pt.xml @@ -329,6 +329,8 @@ Permitir inputs quando Mesen estiver em segundo plano Pausar a emulação quando Mesen estiver em segundo plano Carregar os arquivos IPS/UPS/BPS automaticamente + Hide the pause screen + Display play/record icon when playing or recording a movie Abrir a pasta de Mesen Associação de arquivos Associação de arquivos diff --git a/GUI.NET/Dependencies/resources.ru.xml b/GUI.NET/Dependencies/resources.ru.xml index 0d2765e6..44d60444 100644 --- a/GUI.NET/Dependencies/resources.ru.xml +++ b/GUI.NET/Dependencies/resources.ru.xml @@ -330,6 +330,8 @@ Разрешить ввод в фоне Ставить на паузу при потере фокуса Автоматически загружать IPS/UPS + Hide the pause screen + Display play/record icon when playing or recording a movie Открыть папку Mesen Ассоциации файлов Ассоциации файлов diff --git a/GUI.NET/Dependencies/resources.uk.xml b/GUI.NET/Dependencies/resources.uk.xml index 38280d96..cff187a5 100644 --- a/GUI.NET/Dependencies/resources.uk.xml +++ b/GUI.NET/Dependencies/resources.uk.xml @@ -330,6 +330,8 @@ Дозволити введення в тлі Ставити на паузу при втраті фокуса Автоматично завантажувати IPS/UPS + Hide the pause screen + Display play/record icon when playing or recording a movie Відкрити папку Mesen Асоціації файлів Асоціації файлів diff --git a/GUI.NET/Forms/Config/frmPreferences.Designer.cs b/GUI.NET/Forms/Config/frmPreferences.Designer.cs index 958fe9af..1b75daa2 100644 --- a/GUI.NET/Forms/Config/frmPreferences.Designer.cs +++ b/GUI.NET/Forms/Config/frmPreferences.Designer.cs @@ -45,6 +45,8 @@ namespace Mesen.GUI.Forms.Config this.cboDisplayLanguage = new System.Windows.Forms.ComboBox(); this.tabMain = new System.Windows.Forms.TabControl(); this.tpgGeneral = new System.Windows.Forms.TabPage(); + this.tpgShortcuts = new System.Windows.Forms.TabPage(); + this.ctrlEmulatorShortcuts = new Mesen.GUI.Forms.Config.ctrlEmulatorShortcuts(); this.tpgSaveData = new System.Windows.Forms.TabPage(); this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); this.grpCloudSaves = new System.Windows.Forms.GroupBox(); @@ -91,16 +93,17 @@ namespace Mesen.GUI.Forms.Config this.chkUnfFormat = new System.Windows.Forms.CheckBox(); this.tpgAdvanced = new System.Windows.Forms.TabPage(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.chkDisableGameDatabase = new ctrlRiskyOption(); + this.chkDisableGameDatabase = new Mesen.GUI.Controls.ctrlRiskyOption(); this.chkFdsAutoLoadDisk = new System.Windows.Forms.CheckBox(); this.chkFdsFastForwardOnLoad = new System.Windows.Forms.CheckBox(); this.tmrSyncDateTime = new System.Windows.Forms.Timer(this.components); - this.tpgShortcuts = new System.Windows.Forms.TabPage(); - this.ctrlEmulatorShortcuts = new Mesen.GUI.Forms.Config.ctrlEmulatorShortcuts(); + this.chkDisplayMovieIcons = new System.Windows.Forms.CheckBox(); + this.chkHidePauseOverlay = new System.Windows.Forms.CheckBox(); this.tlpMain.SuspendLayout(); this.flowLayoutPanel2.SuspendLayout(); this.tabMain.SuspendLayout(); this.tpgGeneral.SuspendLayout(); + this.tpgShortcuts.SuspendLayout(); this.tpgSaveData.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout(); this.grpCloudSaves.SuspendLayout(); @@ -125,7 +128,6 @@ namespace Mesen.GUI.Forms.Config this.tlpFileFormat.SuspendLayout(); this.tpgAdvanced.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); - this.tpgShortcuts.SuspendLayout(); this.SuspendLayout(); // // baseConfigPanel @@ -137,6 +139,7 @@ namespace Mesen.GUI.Forms.Config // this.tlpMain.ColumnCount = 1; this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.Controls.Add(this.chkHidePauseOverlay, 0, 9); this.tlpMain.Controls.Add(this.chkSingleInstance, 0, 2); this.tlpMain.Controls.Add(this.chkAutomaticallyCheckForUpdates, 0, 1); this.tlpMain.Controls.Add(this.chkPauseOnMovieEnd, 0, 6); @@ -144,12 +147,15 @@ namespace Mesen.GUI.Forms.Config this.tlpMain.Controls.Add(this.chkPauseWhenInBackground, 0, 4); this.tlpMain.Controls.Add(this.chkAutoLoadIps, 0, 3); this.tlpMain.Controls.Add(this.flowLayoutPanel6, 0, 1); - this.tlpMain.Controls.Add(this.btnOpenMesenFolder, 0, 9); + this.tlpMain.Controls.Add(this.btnOpenMesenFolder, 0, 11); this.tlpMain.Controls.Add(this.flowLayoutPanel2, 0, 0); + this.tlpMain.Controls.Add(this.chkDisplayMovieIcons, 0, 8); this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; this.tlpMain.Location = new System.Drawing.Point(3, 3); this.tlpMain.Name = "tlpMain"; - this.tlpMain.RowCount = 10; + this.tlpMain.RowCount = 12; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); @@ -219,7 +225,7 @@ namespace Mesen.GUI.Forms.Config this.chkAutoLoadIps.AutoSize = true; this.chkAutoLoadIps.Location = new System.Drawing.Point(3, 75); this.chkAutoLoadIps.Name = "chkAutoLoadIps"; - this.chkAutoLoadIps.Size = new System.Drawing.Size(132, 17); + this.chkAutoLoadIps.Size = new System.Drawing.Size(185, 17); this.chkAutoLoadIps.TabIndex = 9; this.chkAutoLoadIps.Text = "Auto-load IPS/UPS/BPS patches"; this.chkAutoLoadIps.UseVisualStyleBackColor = true; @@ -300,6 +306,25 @@ namespace Mesen.GUI.Forms.Config this.tpgGeneral.Text = "General"; this.tpgGeneral.UseVisualStyleBackColor = true; // + // tpgShortcuts + // + this.tpgShortcuts.Controls.Add(this.ctrlEmulatorShortcuts); + this.tpgShortcuts.Location = new System.Drawing.Point(4, 22); + this.tpgShortcuts.Name = "tpgShortcuts"; + this.tpgShortcuts.Padding = new System.Windows.Forms.Padding(3); + this.tpgShortcuts.Size = new System.Drawing.Size(479, 343); + this.tpgShortcuts.TabIndex = 7; + this.tpgShortcuts.Text = "Shortcut Keys"; + this.tpgShortcuts.UseVisualStyleBackColor = true; + // + // ctrlEmulatorShortcuts + // + this.ctrlEmulatorShortcuts.Dock = System.Windows.Forms.DockStyle.Fill; + this.ctrlEmulatorShortcuts.Location = new System.Drawing.Point(3, 3); + this.ctrlEmulatorShortcuts.Name = "ctrlEmulatorShortcuts"; + this.ctrlEmulatorShortcuts.Size = new System.Drawing.Size(473, 337); + this.ctrlEmulatorShortcuts.TabIndex = 0; + // // tpgSaveData // this.tpgSaveData.Controls.Add(this.tableLayoutPanel3); @@ -883,9 +908,10 @@ namespace Mesen.GUI.Forms.Config // chkDisableGameDatabase // this.chkDisableGameDatabase.AutoSize = true; - this.chkDisableGameDatabase.Location = new System.Drawing.Point(3, 3); + this.chkDisableGameDatabase.Checked = false; + this.chkDisableGameDatabase.Location = new System.Drawing.Point(0, 0); this.chkDisableGameDatabase.Name = "chkDisableGameDatabase"; - this.chkDisableGameDatabase.Size = new System.Drawing.Size(170, 17); + this.chkDisableGameDatabase.Size = new System.Drawing.Size(268, 23); this.chkDisableGameDatabase.TabIndex = 6; this.chkDisableGameDatabase.Text = "Disable built-in game database"; // @@ -914,24 +940,25 @@ namespace Mesen.GUI.Forms.Config this.tmrSyncDateTime.Enabled = true; this.tmrSyncDateTime.Tick += new System.EventHandler(this.tmrSyncDateTime_Tick); // - // tpgShortcuts + // chkDisplayMovieIcons // - this.tpgShortcuts.Controls.Add(this.ctrlEmulatorShortcuts); - this.tpgShortcuts.Location = new System.Drawing.Point(4, 22); - this.tpgShortcuts.Name = "tpgShortcuts"; - this.tpgShortcuts.Padding = new System.Windows.Forms.Padding(3); - this.tpgShortcuts.Size = new System.Drawing.Size(479, 343); - this.tpgShortcuts.TabIndex = 7; - this.tpgShortcuts.Text = "Shortcut Keys"; - this.tpgShortcuts.UseVisualStyleBackColor = true; + this.chkDisplayMovieIcons.AutoSize = true; + this.chkDisplayMovieIcons.Location = new System.Drawing.Point(3, 167); + this.chkDisplayMovieIcons.Name = "chkDisplayMovieIcons"; + this.chkDisplayMovieIcons.Size = new System.Drawing.Size(304, 17); + this.chkDisplayMovieIcons.TabIndex = 19; + this.chkDisplayMovieIcons.Text = "Display play/record icon when playing or recording a movie"; + this.chkDisplayMovieIcons.UseVisualStyleBackColor = true; // - // ctrlEmulatorShortcuts + // chkHidePauseOverlay // - this.ctrlEmulatorShortcuts.Dock = System.Windows.Forms.DockStyle.Fill; - this.ctrlEmulatorShortcuts.Location = new System.Drawing.Point(3, 3); - this.ctrlEmulatorShortcuts.Name = "ctrlEmulatorShortcuts"; - this.ctrlEmulatorShortcuts.Size = new System.Drawing.Size(473, 337); - this.ctrlEmulatorShortcuts.TabIndex = 0; + this.chkHidePauseOverlay.AutoSize = true; + this.chkHidePauseOverlay.Location = new System.Drawing.Point(3, 190); + this.chkHidePauseOverlay.Name = "chkHidePauseOverlay"; + this.chkHidePauseOverlay.Size = new System.Drawing.Size(212, 17); + this.chkHidePauseOverlay.TabIndex = 20; + this.chkHidePauseOverlay.Text = "Hide the pause screen"; + this.chkHidePauseOverlay.UseVisualStyleBackColor = true; // // frmPreferences // @@ -954,6 +981,7 @@ namespace Mesen.GUI.Forms.Config this.flowLayoutPanel2.PerformLayout(); this.tabMain.ResumeLayout(false); this.tpgGeneral.ResumeLayout(false); + this.tpgShortcuts.ResumeLayout(false); this.tpgSaveData.ResumeLayout(false); this.tableLayoutPanel3.ResumeLayout(false); this.grpCloudSaves.ResumeLayout(false); @@ -988,7 +1016,6 @@ namespace Mesen.GUI.Forms.Config this.tpgAdvanced.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); - this.tpgShortcuts.ResumeLayout(false); this.ResumeLayout(false); } @@ -1061,5 +1088,7 @@ namespace Mesen.GUI.Forms.Config private System.Windows.Forms.CheckBox chkAutoSaveNotify; private System.Windows.Forms.TabPage tpgShortcuts; private ctrlEmulatorShortcuts ctrlEmulatorShortcuts; + private System.Windows.Forms.CheckBox chkHidePauseOverlay; + private System.Windows.Forms.CheckBox chkDisplayMovieIcons; } } \ No newline at end of file diff --git a/GUI.NET/Forms/Config/frmPreferences.cs b/GUI.NET/Forms/Config/frmPreferences.cs index 385e15e9..67cca806 100644 --- a/GUI.NET/Forms/Config/frmPreferences.cs +++ b/GUI.NET/Forms/Config/frmPreferences.cs @@ -53,6 +53,9 @@ namespace Mesen.GUI.Forms.Config AddBinding("AutoSaveDelay", nudAutoSave); AddBinding("AutoSaveNotify", chkAutoSaveNotify); + AddBinding("DisplayMovieIcons", chkDisplayMovieIcons); + AddBinding("HidePauseOverlay", chkHidePauseOverlay); + UpdateCloudDisplay(); } diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index 81901f00..ed63c44c 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -982,6 +982,9 @@ namespace Mesen.GUI UseNes101Hvc101Behavior = 0x100000000, InBackground = 0x4000000000, + + DisplayMovieIcons = 0x10000000000, + HidePauseOverlay = 0x20000000000, } [Flags] diff --git a/Linux/SdlRenderer.cpp b/Linux/SdlRenderer.cpp index 9d6ee4ec..c6374132 100755 --- a/Linux/SdlRenderer.cpp +++ b/Linux/SdlRenderer.cpp @@ -124,7 +124,7 @@ void SdlRenderer::Render() SDL_Rect dest = {0, 0, (int)_screenWidth, (int)_screenHeight }; SDL_RenderCopy(_sdlRenderer, _sdlTexture, &source, &dest); - if(paused) { + if(paused && !EmulationSettings::CheckFlag(EmulationFlags::HidePauseOverlay)) { DrawPauseScreen(); } else if(VideoDecoder::GetInstance()->IsRunning()) { if(EmulationSettings::CheckFlag(EmulationFlags::ShowFPS)) { diff --git a/Windows/Renderer.cpp b/Windows/Renderer.cpp index 000ffce1..ede286ba 100644 --- a/Windows/Renderer.cpp +++ b/Windows/Renderer.cpp @@ -513,7 +513,7 @@ namespace NES //Draw nes screen DrawNESScreen(); - if(paused) { + if(paused && !EmulationSettings::CheckFlag(EmulationFlags::HidePauseOverlay)) { DrawPauseScreen(); } else if(VideoDecoder::GetInstance()->IsRunning()) { if(EmulationSettings::CheckFlag(EmulationFlags::ShowFPS)) {