mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-12-29 08:30:04 +00:00
Full-screen: Retain uniform x and y scaling, unless user specifies a full-screen resolution (#1121)
This commit is contained in:
parent
3875b7b433
commit
4a7f05ed36
@ -64,6 +64,8 @@ static bool g_bSysClkOK = false;
|
|||||||
|
|
||||||
bool g_bRestartFullScreen = false;
|
bool g_bRestartFullScreen = false;
|
||||||
|
|
||||||
|
static bool g_fullScreenResolutionChangedByUser = false;
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
bool GetLoadedSaveStateFlag(void)
|
bool GetLoadedSaveStateFlag(void)
|
||||||
@ -86,6 +88,11 @@ bool GetHookAltGrControl(void)
|
|||||||
return g_bHookAltGrControl;
|
return g_bHookAltGrControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GetFullScreenResolutionChangedByUser(void)
|
||||||
|
{
|
||||||
|
return g_fullScreenResolutionChangedByUser;
|
||||||
|
}
|
||||||
|
|
||||||
static void ResetToLogoMode(void)
|
static void ResetToLogoMode(void)
|
||||||
{
|
{
|
||||||
g_nAppMode = MODE_LOGO;
|
g_nAppMode = MODE_LOGO;
|
||||||
@ -809,6 +816,9 @@ static void RepeatInitialization(void)
|
|||||||
LogFileOutput("Best resolution for -fs-width/height=x switch(es): Width=%d, Height=%d\n", bestWidth, bestHeight);
|
LogFileOutput("Best resolution for -fs-width/height=x switch(es): Width=%d, Height=%d\n", bestWidth, bestHeight);
|
||||||
else
|
else
|
||||||
LogFileOutput("Failed to set parameter for -fs-width/height=x switch(es)\n");
|
LogFileOutput("Failed to set parameter for -fs-width/height=x switch(es)\n");
|
||||||
|
|
||||||
|
if (res)
|
||||||
|
g_fullScreenResolutionChangedByUser = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pre: may need g_hFrameWindow for MessageBox errors
|
// Pre: may need g_hFrameWindow for MessageBox errors
|
||||||
|
@ -8,5 +8,6 @@ void SingleStep(bool bReinit);
|
|||||||
bool GetLoadedSaveStateFlag(void);
|
bool GetLoadedSaveStateFlag(void);
|
||||||
bool GetHookAltTab(void);
|
bool GetHookAltTab(void);
|
||||||
bool GetHookAltGrControl(void);
|
bool GetHookAltGrControl(void);
|
||||||
|
bool GetFullScreenResolutionChangedByUser(void);
|
||||||
|
|
||||||
extern bool g_bRestartFullScreen;
|
extern bool g_bRestartFullScreen;
|
||||||
|
@ -2149,6 +2149,13 @@ void Win32Frame::SetFullScreenMode(void)
|
|||||||
scalex = width / GetVideo().GetFrameBufferBorderlessWidth();
|
scalex = width / GetVideo().GetFrameBufferBorderlessWidth();
|
||||||
scaley = height / GetVideo().GetFrameBufferBorderlessHeight();
|
scaley = height / GetVideo().GetFrameBufferBorderlessHeight();
|
||||||
|
|
||||||
|
// Retain aspect ratio if user hasn't changed full-screen resolution (GH#1121)
|
||||||
|
if (!GetFullScreenResolutionChangedByUser())
|
||||||
|
{
|
||||||
|
const int minimumScale = (scalex <= scaley) ? scalex : scaley;
|
||||||
|
scalex = scaley = minimumScale;
|
||||||
|
}
|
||||||
|
|
||||||
// NB. Separate x,y scaling is OK in full-screen mode
|
// NB. Separate x,y scaling is OK in full-screen mode
|
||||||
// . eg. SHR 640x400 (scalex=2, scaley=3) => 1280x1200, which roughly gives a 4:3 aspect ratio for a resolution of 1600x1200
|
// . eg. SHR 640x400 (scalex=2, scaley=3) => 1280x1200, which roughly gives a 4:3 aspect ratio for a resolution of 1600x1200
|
||||||
g_win_fullscreen_offsetx = ((int)width - (int)(scalex * GetVideo().GetFrameBufferBorderlessWidth())) / 2;
|
g_win_fullscreen_offsetx = ((int)width - (int)(scalex * GetVideo().GetFrameBufferBorderlessWidth())) / 2;
|
||||||
|
Loading…
Reference in New Issue
Block a user