UI: Added option to display play/record icon when playing/recording movies + option to hide the pause overlay

This commit is contained in:
Souryo 2017-04-15 15:47:50 -04:00
parent 10d68ac511
commit 2077a7ae13
15 changed files with 162 additions and 29 deletions

View file

@ -50,6 +50,9 @@ enum EmulationFlags : uint64_t
Turbo = 0x2000000000, Turbo = 0x2000000000,
InBackground = 0x4000000000, InBackground = 0x4000000000,
NsfPlayerEnabled = 0x8000000000, NsfPlayerEnabled = 0x8000000000,
DisplayMovieIcons = 0x10000000000,
HidePauseOverlay = 0x20000000000,
}; };
enum class AudioChannel enum class AudioChannel

View file

@ -2,6 +2,7 @@
#include "VideoHud.h" #include "VideoHud.h"
#include "ControlManager.h" #include "ControlManager.h"
#include "StandardController.h" #include "StandardController.h"
#include "Movie.h"
void VideoHud::DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan) 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(); int scale = frameInfo.Width / overscan.GetScreenWidth();
uint32_t* rgbaBuffer = (uint32_t*)outputBuffer; uint32_t* rgbaBuffer = (uint32_t*)outputBuffer;
@ -71,6 +74,47 @@ bool VideoHud::DisplayControllerInput(int inputPort, uint8_t *outputBuffer, Fram
return false; 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) void VideoHud::BlendColors(uint32_t* output, uint32_t input)
{ {
uint8_t inA = (input >> 24) & 0xFF; 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; *output = 0xFF000000 | (outR << 16) | (outG << 8) | outB;
} }
const vector<uint32_t> 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<uint32_t> 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<uint32_t> VideoHud::_gamePads[4] = { const vector<uint32_t> 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,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, 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,

View file

@ -7,9 +7,12 @@ class VideoHud
{ {
private: private:
static const vector<uint32_t> _gamePads[4]; static const vector<uint32_t> _gamePads[4];
static const vector<uint32_t> _playIcon;
static const vector<uint32_t> _recordIcon;
void BlendColors(uint32_t* output, uint32_t input); 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: public:
void DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan); void DrawHud(uint8_t *outputBuffer, FrameInfo frameInfo, OverscanDimensions overscan);

View file

@ -14,6 +14,9 @@ namespace Mesen.GUI.Config
public bool AllowInvalidInput = false; public bool AllowInvalidInput = false;
public bool RemoveSpriteLimit = false; public bool RemoveSpriteLimit = false;
public bool DisplayMovieIcons = false;
public bool HidePauseOverlay = false;
public bool AutoSave = true; public bool AutoSave = true;
public Int32 AutoSaveDelay = 5; public Int32 AutoSaveDelay = 5;
public bool AutoSaveNotify = false; public bool AutoSaveNotify = false;
@ -90,6 +93,9 @@ namespace Mesen.GUI.Config
InteropEmu.SetFlag(EmulationFlags.PauseWhenInBackground, preferenceInfo.PauseWhenInBackground); InteropEmu.SetFlag(EmulationFlags.PauseWhenInBackground, preferenceInfo.PauseWhenInBackground);
InteropEmu.SetFlag(EmulationFlags.DisableGameDatabase, preferenceInfo.DisableGameDatabase); 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.NsfSetNsfConfig(preferenceInfo.NsfAutoDetectSilence ? preferenceInfo.NsfAutoDetectSilenceDelay : 0, preferenceInfo.NsfMoveToNextTrackAfterTime ? preferenceInfo.NsfMoveToNextTrackTime : -1, preferenceInfo.NsfDisableApuIrqs);
InteropEmu.SetAutoSaveOptions(preferenceInfo.AutoSave ? (uint)preferenceInfo.AutoSaveDelay : 0, preferenceInfo.AutoSaveNotify); InteropEmu.SetAutoSaveOptions(preferenceInfo.AutoSave ? (uint)preferenceInfo.AutoSaveDelay : 0, preferenceInfo.AutoSaveNotify);
InteropEmu.SetEmulatorKeys(new EmulatorKeyMappingSet() { KeySet1 = preferenceInfo.EmulatorKeySet1.Value, KeySet2 = preferenceInfo.EmulatorKeySet2.Value }); InteropEmu.SetEmulatorKeys(new EmulatorKeyMappingSet() { KeySet1 = preferenceInfo.EmulatorKeySet1.Value, KeySet2 = preferenceInfo.EmulatorKeySet2.Value });

View file

@ -329,6 +329,8 @@
<Control ID="chkAllowBackgroundInput">Permitir entradas aunque Mesen esté en segundo plano</Control> <Control ID="chkAllowBackgroundInput">Permitir entradas aunque Mesen esté en segundo plano</Control>
<Control ID="chkPauseWhenInBackground">Pausar la emulación aunque Mesen esté en segundo plano</Control> <Control ID="chkPauseWhenInBackground">Pausar la emulación aunque Mesen esté en segundo plano</Control>
<Control ID="chkAutoLoadIps">Cargar los archivos IPS/UPS/BPS automáticamente</Control> <Control ID="chkAutoLoadIps">Cargar los archivos IPS/UPS/BPS automáticamente</Control>
<Control ID="chkHidePauseOverlay">Hide the pause screen</Control>
<Control ID="chkDisplayMovieIcons">Display play/record icon when playing or recording a movie</Control>
<Control ID="btnOpenMesenFolder">Abrir el directorio de Mesen</Control> <Control ID="btnOpenMesenFolder">Abrir el directorio de Mesen</Control>
<Control ID="tpgFileAssociations">Asociación de archivos</Control> <Control ID="tpgFileAssociations">Asociación de archivos</Control>
<Control ID="grpFileAssociations">Asociación de archivos</Control> <Control ID="grpFileAssociations">Asociación de archivos</Control>

View file

@ -331,6 +331,8 @@
<Control ID="chkAllowBackgroundInput">Permettre les entrées lorsque Mesen est en arrière-plan</Control> <Control ID="chkAllowBackgroundInput">Permettre les entrées lorsque Mesen est en arrière-plan</Control>
<Control ID="chkPauseWhenInBackground">Pauser l'émulation lorsque Mesen est en arrière-plan</Control> <Control ID="chkPauseWhenInBackground">Pauser l'émulation lorsque Mesen est en arrière-plan</Control>
<Control ID="chkAutoLoadIps">Charger les fichiers IPS/UPS/BPS automatiquement</Control> <Control ID="chkAutoLoadIps">Charger les fichiers IPS/UPS/BPS automatiquement</Control>
<Control ID="chkHidePauseOverlay">Ne pas afficher l'écran de pause</Control>
<Control ID="chkDisplayMovieIcons">Afficher un icône lors de la lecture ou de l'enregistrement des films</Control>
<Control ID="btnOpenMesenFolder">Ouvrir le dossier de Mesen</Control> <Control ID="btnOpenMesenFolder">Ouvrir le dossier de Mesen</Control>
<Control ID="tpgFileAssociations">Associations de fichiers</Control> <Control ID="tpgFileAssociations">Associations de fichiers</Control>
<Control ID="grpFileAssociations">Associations de fichiers</Control> <Control ID="grpFileAssociations">Associations de fichiers</Control>

View file

@ -330,6 +330,8 @@
<Control ID="chkAllowBackgroundInput">Mesenが最前面ではない時、コントローラは反応しない</Control> <Control ID="chkAllowBackgroundInput">Mesenが最前面ではない時、コントローラは反応しない</Control>
<Control ID="chkPauseWhenInBackground">Mesenが最前面ではない時、自動的にポーズする</Control> <Control ID="chkPauseWhenInBackground">Mesenが最前面ではない時、自動的にポーズする</Control>
<Control ID="chkAutoLoadIps">自動的にパッチファイルIPS・UPSをロードする</Control> <Control ID="chkAutoLoadIps">自動的にパッチファイルIPS・UPSをロードする</Control>
<Control ID="chkHidePauseOverlay">ポーズ画面を隠す</Control>
<Control ID="chkDisplayMovieIcons">動画の録画や再生の際、アイコンを表示する</Control>
<Control ID="btnOpenMesenFolder">Mesenのフォルダを開く</Control> <Control ID="btnOpenMesenFolder">Mesenのフォルダを開く</Control>
<Control ID="tpgFileAssociations">ファイルの関連付け</Control> <Control ID="tpgFileAssociations">ファイルの関連付け</Control>
<Control ID="grpFileAssociations">ファイルの関連付け</Control> <Control ID="grpFileAssociations">ファイルの関連付け</Control>

View file

@ -329,6 +329,8 @@
<Control ID="chkAllowBackgroundInput">Permitir inputs quando Mesen estiver em segundo plano</Control> <Control ID="chkAllowBackgroundInput">Permitir inputs quando Mesen estiver em segundo plano</Control>
<Control ID="chkPauseWhenInBackground">Pausar a emulação quando Mesen estiver em segundo plano</Control> <Control ID="chkPauseWhenInBackground">Pausar a emulação quando Mesen estiver em segundo plano</Control>
<Control ID="chkAutoLoadIps">Carregar os arquivos IPS/UPS/BPS automaticamente</Control> <Control ID="chkAutoLoadIps">Carregar os arquivos IPS/UPS/BPS automaticamente</Control>
<Control ID="chkHidePauseOverlay">Hide the pause screen</Control>
<Control ID="chkDisplayMovieIcons">Display play/record icon when playing or recording a movie</Control>
<Control ID="btnOpenMesenFolder">Abrir a pasta de Mesen</Control> <Control ID="btnOpenMesenFolder">Abrir a pasta de Mesen</Control>
<Control ID="tpgFileAssociations">Associação de arquivos</Control> <Control ID="tpgFileAssociations">Associação de arquivos</Control>
<Control ID="grpFileAssociations">Associação de arquivos</Control> <Control ID="grpFileAssociations">Associação de arquivos</Control>

View file

@ -330,6 +330,8 @@
<Control ID="chkAllowBackgroundInput">Разрешить ввод в фоне</Control> <Control ID="chkAllowBackgroundInput">Разрешить ввод в фоне</Control>
<Control ID="chkPauseWhenInBackground">Ставить на паузу при потере фокуса</Control> <Control ID="chkPauseWhenInBackground">Ставить на паузу при потере фокуса</Control>
<Control ID="chkAutoLoadIps">Автоматически загружать IPS/UPS</Control> <Control ID="chkAutoLoadIps">Автоматически загружать IPS/UPS</Control>
<Control ID="chkHidePauseOverlay">Hide the pause screen</Control>
<Control ID="chkDisplayMovieIcons">Display play/record icon when playing or recording a movie</Control>
<Control ID="btnOpenMesenFolder">Открыть папку Mesen</Control> <Control ID="btnOpenMesenFolder">Открыть папку Mesen</Control>
<Control ID="tpgFileAssociations">Ассоциации файлов</Control> <Control ID="tpgFileAssociations">Ассоциации файлов</Control>
<Control ID="grpFileAssociations">Ассоциации файлов</Control> <Control ID="grpFileAssociations">Ассоциации файлов</Control>

View file

@ -330,6 +330,8 @@
<Control ID="chkAllowBackgroundInput">Дозволити введення в тлі</Control> <Control ID="chkAllowBackgroundInput">Дозволити введення в тлі</Control>
<Control ID="chkPauseWhenInBackground">Ставити на паузу при втраті фокуса</Control> <Control ID="chkPauseWhenInBackground">Ставити на паузу при втраті фокуса</Control>
<Control ID="chkAutoLoadIps">Автоматично завантажувати IPS/UPS</Control> <Control ID="chkAutoLoadIps">Автоматично завантажувати IPS/UPS</Control>
<Control ID="chkHidePauseOverlay">Hide the pause screen</Control>
<Control ID="chkDisplayMovieIcons">Display play/record icon when playing or recording a movie</Control>
<Control ID="btnOpenMesenFolder">Відкрити папку Mesen</Control> <Control ID="btnOpenMesenFolder">Відкрити папку Mesen</Control>
<Control ID="tpgFileAssociations">Асоціації файлів</Control> <Control ID="tpgFileAssociations">Асоціації файлів</Control>
<Control ID="grpFileAssociations">Асоціації файлів</Control> <Control ID="grpFileAssociations">Асоціації файлів</Control>

View file

@ -45,6 +45,8 @@ namespace Mesen.GUI.Forms.Config
this.cboDisplayLanguage = new System.Windows.Forms.ComboBox(); this.cboDisplayLanguage = new System.Windows.Forms.ComboBox();
this.tabMain = new System.Windows.Forms.TabControl(); this.tabMain = new System.Windows.Forms.TabControl();
this.tpgGeneral = new System.Windows.Forms.TabPage(); 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.tpgSaveData = new System.Windows.Forms.TabPage();
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
this.grpCloudSaves = new System.Windows.Forms.GroupBox(); this.grpCloudSaves = new System.Windows.Forms.GroupBox();
@ -91,16 +93,17 @@ namespace Mesen.GUI.Forms.Config
this.chkUnfFormat = new System.Windows.Forms.CheckBox(); this.chkUnfFormat = new System.Windows.Forms.CheckBox();
this.tpgAdvanced = new System.Windows.Forms.TabPage(); this.tpgAdvanced = new System.Windows.Forms.TabPage();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); 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.chkFdsAutoLoadDisk = new System.Windows.Forms.CheckBox();
this.chkFdsFastForwardOnLoad = new System.Windows.Forms.CheckBox(); this.chkFdsFastForwardOnLoad = new System.Windows.Forms.CheckBox();
this.tmrSyncDateTime = new System.Windows.Forms.Timer(this.components); this.tmrSyncDateTime = new System.Windows.Forms.Timer(this.components);
this.tpgShortcuts = new System.Windows.Forms.TabPage(); this.chkDisplayMovieIcons = new System.Windows.Forms.CheckBox();
this.ctrlEmulatorShortcuts = new Mesen.GUI.Forms.Config.ctrlEmulatorShortcuts(); this.chkHidePauseOverlay = new System.Windows.Forms.CheckBox();
this.tlpMain.SuspendLayout(); this.tlpMain.SuspendLayout();
this.flowLayoutPanel2.SuspendLayout(); this.flowLayoutPanel2.SuspendLayout();
this.tabMain.SuspendLayout(); this.tabMain.SuspendLayout();
this.tpgGeneral.SuspendLayout(); this.tpgGeneral.SuspendLayout();
this.tpgShortcuts.SuspendLayout();
this.tpgSaveData.SuspendLayout(); this.tpgSaveData.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout();
this.grpCloudSaves.SuspendLayout(); this.grpCloudSaves.SuspendLayout();
@ -125,7 +128,6 @@ namespace Mesen.GUI.Forms.Config
this.tlpFileFormat.SuspendLayout(); this.tlpFileFormat.SuspendLayout();
this.tpgAdvanced.SuspendLayout(); this.tpgAdvanced.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout();
this.tpgShortcuts.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// baseConfigPanel // baseConfigPanel
@ -137,6 +139,7 @@ namespace Mesen.GUI.Forms.Config
// //
this.tlpMain.ColumnCount = 1; this.tlpMain.ColumnCount = 1;
this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); 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.chkSingleInstance, 0, 2);
this.tlpMain.Controls.Add(this.chkAutomaticallyCheckForUpdates, 0, 1); this.tlpMain.Controls.Add(this.chkAutomaticallyCheckForUpdates, 0, 1);
this.tlpMain.Controls.Add(this.chkPauseOnMovieEnd, 0, 6); 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.chkPauseWhenInBackground, 0, 4);
this.tlpMain.Controls.Add(this.chkAutoLoadIps, 0, 3); this.tlpMain.Controls.Add(this.chkAutoLoadIps, 0, 3);
this.tlpMain.Controls.Add(this.flowLayoutPanel6, 0, 1); 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.flowLayoutPanel2, 0, 0);
this.tlpMain.Controls.Add(this.chkDisplayMovieIcons, 0, 8);
this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpMain.Location = new System.Drawing.Point(3, 3); this.tlpMain.Location = new System.Drawing.Point(3, 3);
this.tlpMain.Name = "tlpMain"; 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()); 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.AutoSize = true;
this.chkAutoLoadIps.Location = new System.Drawing.Point(3, 75); this.chkAutoLoadIps.Location = new System.Drawing.Point(3, 75);
this.chkAutoLoadIps.Name = "chkAutoLoadIps"; 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.TabIndex = 9;
this.chkAutoLoadIps.Text = "Auto-load IPS/UPS/BPS patches"; this.chkAutoLoadIps.Text = "Auto-load IPS/UPS/BPS patches";
this.chkAutoLoadIps.UseVisualStyleBackColor = true; this.chkAutoLoadIps.UseVisualStyleBackColor = true;
@ -300,6 +306,25 @@ namespace Mesen.GUI.Forms.Config
this.tpgGeneral.Text = "General"; this.tpgGeneral.Text = "General";
this.tpgGeneral.UseVisualStyleBackColor = true; 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 // tpgSaveData
// //
this.tpgSaveData.Controls.Add(this.tableLayoutPanel3); this.tpgSaveData.Controls.Add(this.tableLayoutPanel3);
@ -883,9 +908,10 @@ namespace Mesen.GUI.Forms.Config
// chkDisableGameDatabase // chkDisableGameDatabase
// //
this.chkDisableGameDatabase.AutoSize = true; 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.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.TabIndex = 6;
this.chkDisableGameDatabase.Text = "Disable built-in game database"; this.chkDisableGameDatabase.Text = "Disable built-in game database";
// //
@ -914,24 +940,25 @@ namespace Mesen.GUI.Forms.Config
this.tmrSyncDateTime.Enabled = true; this.tmrSyncDateTime.Enabled = true;
this.tmrSyncDateTime.Tick += new System.EventHandler(this.tmrSyncDateTime_Tick); this.tmrSyncDateTime.Tick += new System.EventHandler(this.tmrSyncDateTime_Tick);
// //
// tpgShortcuts // chkDisplayMovieIcons
// //
this.tpgShortcuts.Controls.Add(this.ctrlEmulatorShortcuts); this.chkDisplayMovieIcons.AutoSize = true;
this.tpgShortcuts.Location = new System.Drawing.Point(4, 22); this.chkDisplayMovieIcons.Location = new System.Drawing.Point(3, 167);
this.tpgShortcuts.Name = "tpgShortcuts"; this.chkDisplayMovieIcons.Name = "chkDisplayMovieIcons";
this.tpgShortcuts.Padding = new System.Windows.Forms.Padding(3); this.chkDisplayMovieIcons.Size = new System.Drawing.Size(304, 17);
this.tpgShortcuts.Size = new System.Drawing.Size(479, 343); this.chkDisplayMovieIcons.TabIndex = 19;
this.tpgShortcuts.TabIndex = 7; this.chkDisplayMovieIcons.Text = "Display play/record icon when playing or recording a movie";
this.tpgShortcuts.Text = "Shortcut Keys"; this.chkDisplayMovieIcons.UseVisualStyleBackColor = true;
this.tpgShortcuts.UseVisualStyleBackColor = true;
// //
// ctrlEmulatorShortcuts // chkHidePauseOverlay
// //
this.ctrlEmulatorShortcuts.Dock = System.Windows.Forms.DockStyle.Fill; this.chkHidePauseOverlay.AutoSize = true;
this.ctrlEmulatorShortcuts.Location = new System.Drawing.Point(3, 3); this.chkHidePauseOverlay.Location = new System.Drawing.Point(3, 190);
this.ctrlEmulatorShortcuts.Name = "ctrlEmulatorShortcuts"; this.chkHidePauseOverlay.Name = "chkHidePauseOverlay";
this.ctrlEmulatorShortcuts.Size = new System.Drawing.Size(473, 337); this.chkHidePauseOverlay.Size = new System.Drawing.Size(212, 17);
this.ctrlEmulatorShortcuts.TabIndex = 0; this.chkHidePauseOverlay.TabIndex = 20;
this.chkHidePauseOverlay.Text = "Hide the pause screen";
this.chkHidePauseOverlay.UseVisualStyleBackColor = true;
// //
// frmPreferences // frmPreferences
// //
@ -954,6 +981,7 @@ namespace Mesen.GUI.Forms.Config
this.flowLayoutPanel2.PerformLayout(); this.flowLayoutPanel2.PerformLayout();
this.tabMain.ResumeLayout(false); this.tabMain.ResumeLayout(false);
this.tpgGeneral.ResumeLayout(false); this.tpgGeneral.ResumeLayout(false);
this.tpgShortcuts.ResumeLayout(false);
this.tpgSaveData.ResumeLayout(false); this.tpgSaveData.ResumeLayout(false);
this.tableLayoutPanel3.ResumeLayout(false); this.tableLayoutPanel3.ResumeLayout(false);
this.grpCloudSaves.ResumeLayout(false); this.grpCloudSaves.ResumeLayout(false);
@ -988,7 +1016,6 @@ namespace Mesen.GUI.Forms.Config
this.tpgAdvanced.ResumeLayout(false); this.tpgAdvanced.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout(); this.tableLayoutPanel1.PerformLayout();
this.tpgShortcuts.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@ -1061,5 +1088,7 @@ namespace Mesen.GUI.Forms.Config
private System.Windows.Forms.CheckBox chkAutoSaveNotify; private System.Windows.Forms.CheckBox chkAutoSaveNotify;
private System.Windows.Forms.TabPage tpgShortcuts; private System.Windows.Forms.TabPage tpgShortcuts;
private ctrlEmulatorShortcuts ctrlEmulatorShortcuts; private ctrlEmulatorShortcuts ctrlEmulatorShortcuts;
private System.Windows.Forms.CheckBox chkHidePauseOverlay;
private System.Windows.Forms.CheckBox chkDisplayMovieIcons;
} }
} }

View file

@ -53,6 +53,9 @@ namespace Mesen.GUI.Forms.Config
AddBinding("AutoSaveDelay", nudAutoSave); AddBinding("AutoSaveDelay", nudAutoSave);
AddBinding("AutoSaveNotify", chkAutoSaveNotify); AddBinding("AutoSaveNotify", chkAutoSaveNotify);
AddBinding("DisplayMovieIcons", chkDisplayMovieIcons);
AddBinding("HidePauseOverlay", chkHidePauseOverlay);
UpdateCloudDisplay(); UpdateCloudDisplay();
} }

View file

@ -982,6 +982,9 @@ namespace Mesen.GUI
UseNes101Hvc101Behavior = 0x100000000, UseNes101Hvc101Behavior = 0x100000000,
InBackground = 0x4000000000, InBackground = 0x4000000000,
DisplayMovieIcons = 0x10000000000,
HidePauseOverlay = 0x20000000000,
} }
[Flags] [Flags]

View file

@ -124,7 +124,7 @@ void SdlRenderer::Render()
SDL_Rect dest = {0, 0, (int)_screenWidth, (int)_screenHeight }; SDL_Rect dest = {0, 0, (int)_screenWidth, (int)_screenHeight };
SDL_RenderCopy(_sdlRenderer, _sdlTexture, &source, &dest); SDL_RenderCopy(_sdlRenderer, _sdlTexture, &source, &dest);
if(paused) { if(paused && !EmulationSettings::CheckFlag(EmulationFlags::HidePauseOverlay)) {
DrawPauseScreen(); DrawPauseScreen();
} else if(VideoDecoder::GetInstance()->IsRunning()) { } else if(VideoDecoder::GetInstance()->IsRunning()) {
if(EmulationSettings::CheckFlag(EmulationFlags::ShowFPS)) { if(EmulationSettings::CheckFlag(EmulationFlags::ShowFPS)) {

View file

@ -513,7 +513,7 @@ namespace NES
//Draw nes screen //Draw nes screen
DrawNESScreen(); DrawNESScreen();
if(paused) { if(paused && !EmulationSettings::CheckFlag(EmulationFlags::HidePauseOverlay)) {
DrawPauseScreen(); DrawPauseScreen();
} else if(VideoDecoder::GetInstance()->IsRunning()) { } else if(VideoDecoder::GetInstance()->IsRunning()) {
if(EmulationSettings::CheckFlag(EmulationFlags::ShowFPS)) { if(EmulationSettings::CheckFlag(EmulationFlags::ShowFPS)) {