UI: Minor fixes for display size when changing settings

This commit is contained in:
Souryo 2016-12-30 16:43:49 -05:00
parent b0dafd311a
commit 688d10a66b
4 changed files with 30 additions and 25 deletions

View File

@ -112,15 +112,18 @@ void VideoDecoder::DecodeFrame()
aviRecorder->AddFrame(_videoFilter->GetOutputBuffer());
}
FrameInfo frameInfo = _videoFilter->GetFrameInfo();
if(_previousScale != EmulationSettings::GetVideoScale() || frameInfo.Height != _previousFrameInfo.Height || frameInfo.Width != _previousFrameInfo.Width) {
ScreenSize screenSize;
GetScreenSize(screenSize, true);
if(_previousScale != EmulationSettings::GetVideoScale() || screenSize.Height != _previousScreenSize.Height || screenSize.Width != _previousScreenSize.Width) {
MessageManager::SendNotification(ConsoleNotificationType::ResolutionChanged);
}
_previousScale = EmulationSettings::GetVideoScale();
_previousFrameInfo = frameInfo;
_previousScreenSize = screenSize;
_frameChanged = false;
FrameInfo frameInfo = _videoFilter->GetFrameInfo();
_frameChanged = false;
VideoRenderer::GetInstance()->UpdateFrame(_videoFilter->GetOutputBuffer(), frameInfo.Width, frameInfo.Height);
}

View File

@ -38,7 +38,7 @@ private:
atomic<bool> _stopFlag;
uint32_t _frameCount = 0;
FrameInfo _previousFrameInfo = {};
ScreenSize _previousScreenSize = {};
double _previousScale = 0;
VideoFilterType _videoFilterType = VideoFilterType::None;

View File

@ -80,6 +80,7 @@ namespace Mesen.GUI.Forms.Config
protected override bool ValidateInput()
{
VideoFilterType orgFilter = ((VideoInfo)Entity).VideoFilter;
UpdateObject();
UpdatePalette();
VideoFilterType filter = ((VideoInfo)Entity).VideoFilter;
@ -94,6 +95,11 @@ namespace Mesen.GUI.Forms.Config
} else {
grpNtscFilter.Visible = false;
}
if(filter != orgFilter) {
nudScale.Value = filter == VideoFilterType.None ? 2 : 1;
}
VideoInfo.ApplyConfig();
return true;
}

View File

@ -306,27 +306,22 @@ namespace Mesen.GUI.Forms
{
InteropEmu.ScreenSize size = InteropEmu.GetScreenSize(false);
Rectangle screenBounds = Screen.FromHandle(this.Handle).Bounds;
if(size.Width > screenBounds.Width || size.Height > screenBounds.Height) {
if(!_customSize && this.WindowState != FormWindowState.Maximized) {
Size sizeGap = this.Size - this.ClientSize;
_regularScale = size.Scale;
UpdateScaleMenu(size.Scale);
this.Resize -= frmMain_Resize;
this.ClientSize = new Size(Math.Max(this.MinimumSize.Width - sizeGap.Width, size.Width), Math.Max(this.MinimumSize.Height - sizeGap.Height, size.Height + menuStrip.Height));
this.Resize += frmMain_Resize;
} else if(_customSize) {
SetScaleBasedOnWindowSize();
} else {
if(!_customSize && this.WindowState != FormWindowState.Maximized) {
Size sizeGap = this.Size - this.ClientSize;
_regularScale = size.Scale;
UpdateScaleMenu(size.Scale);
this.Resize -= frmMain_Resize;
this.ClientSize = new Size(Math.Max(this.MinimumSize.Width - sizeGap.Width, size.Width), Math.Max(this.MinimumSize.Height - sizeGap.Height, size.Height + menuStrip.Height));
this.Resize += frmMain_Resize;
} else if(_customSize) {
SetScaleBasedOnWindowSize();
}
ctrlRenderer.Size = new Size(size.Width, size.Height);
ctrlRenderer.Left = (panelRenderer.Width - ctrlRenderer.Width) / 2;
ctrlRenderer.Top = (panelRenderer.Height - ctrlRenderer.Height) / 2;
}
ctrlRenderer.Size = new Size(size.Width, size.Height);
ctrlRenderer.Left = (panelRenderer.Width - ctrlRenderer.Width) / 2;
ctrlRenderer.Top = (panelRenderer.Height - ctrlRenderer.Height) / 2;
}
private void frmMain_Resize(object sender, EventArgs e)
@ -1462,7 +1457,8 @@ namespace Mesen.GUI.Forms
if(_fullscreenMode) {
IntPtr handle = this.Handle;
this.BeginInvoke((MethodInvoker)(() => {
this.ctrlRenderer.Top += this.menuStrip.Visible ? -menuStrip.Height : menuStrip.Height;
int rendererTop = (panelRenderer.Height + (this.menuStrip.Visible ? menuStrip.Height : 0) - ctrlRenderer.Height) / 2;
this.ctrlRenderer.Top = rendererTop + (this.menuStrip.Visible ? -menuStrip.Height : 0);
}));
}
}