* Video config: added "Square pixels" option, enabled by default

* Video config: renamed "Use console BG color for empty areas" option to just "BG color"
* Video config: added aspect ratio fields for customizing "TV Aspect" ratio, by default it's 4/3
This commit is contained in:
ansstuff 2013-04-19 16:34:55 +00:00
parent 510b8a770b
commit d962178d15
8 changed files with 190 additions and 148 deletions

View File

@ -33,23 +33,24 @@ extern int NoWaiting;
extern int eoptions;
#define EO_BGRUN 1
#define EO_BGRUN 1
#define EO_CPALETTE 4
#define EO_NOSPRLIM 8
#define EO_FSAFTERLOAD 32
#define EO_FOAFTERSTART 64
#define EO_NOTHROTTLE 128
#define EO_CLIPSIDES 256
#define EO_HIDEMENU 2048
#define EO_HIGHPRIO 4096
#define EO_FORCEASPECT 8192
#define EO_FORCEISCALE 16384
#define EO_FOURSCORE 32768
#define EO_BESTFIT 65536
#define EO_BGCOLOR 131072
#define EO_HIDEMOUSE 262144
#define EO_TVASPECT 524288
#define EO_CPALETTE 4
#define EO_NOSPRLIM 8
#define EO_FSAFTERLOAD 32
#define EO_FOAFTERSTART 64
#define EO_NOTHROTTLE 128
#define EO_CLIPSIDES 256
#define EO_HIDEMENU 2048
#define EO_HIGHPRIO 4096
#define EO_FORCEASPECT 8192
#define EO_FORCEISCALE 16384
#define EO_FOURSCORE 32768
#define EO_BESTFIT 65536
#define EO_BGCOLOR 131072
#define EO_HIDEMOUSE 262144
#define EO_TVASPECT 524288
#define EO_SQUAREPIXELS 1048576
bool directoryExists(const char* dirname);
void WindowBoundsCheckResize(int &windowPosX, int &windowPosY, int windowSizeX, long windowRight);

View File

@ -203,8 +203,8 @@ static CFGSTRUCT fceuconfig[] =
AC(NTSCwinspecial),
AC(winsizemulx),
AC(winsizemuly),
NAC("saspectw987",saspectw),
NAC("saspecth987",saspecth),
AC(tvAspectX),
AC(tvAspectY),
AC(soundrate),
AC(soundbuftime),

View File

@ -122,7 +122,7 @@ void ApplyDefaultCommandMapping(void);
// Internal variables
int frameSkipAmt = 18;
uint8 *xbsave = NULL;
int eoptions = EO_BGRUN | EO_FORCEISCALE | EO_BESTFIT | EO_BGCOLOR;
int eoptions = EO_BGRUN | EO_FORCEISCALE | EO_BESTFIT | EO_BGCOLOR | EO_SQUAREPIXELS;
//global variables
int soundoptions = SO_SECONDARY | SO_GFOCUS;
@ -141,8 +141,8 @@ int soundPCMvol = 256; //Sound channel PCM - volume control
int KillFCEUXonFrame = 0; //TODO: clean up, this is used in fceux, move it over there?
double saspectw = 1.0, saspecth = 1.0;
double winsizemulx = 1.0, winsizemuly = 1.0;
double tvAspectX = TV_ASPECT_DEFAULT_X, tvAspectY = TV_ASPECT_DEFAULT_Y;
int genie = 0;
int pal_emulation = 0;
int pal_setting_specified = 0;

View File

@ -82,8 +82,11 @@ static const char *default_directory_names[13] = {
#define NUMBER_OF_DIRECTORIES sizeof(directory_names) / sizeof(*directory_names)
#define NUMBER_OF_DEFAULT_DIRECTORIES sizeof(default_directory_names) / sizeof(*default_directory_names)
extern double saspectw, saspecth;
#define TV_ASPECT_DEFAULT_X 4.0
#define TV_ASPECT_DEFAULT_Y 3.0
extern double winsizemulx, winsizemuly;
extern double tvAspectX, tvAspectY;
extern int ismaximized;
extern int soundoptions;

View File

@ -1746,67 +1746,70 @@ BEGIN
PUSHBUTTON "Edit",IDC_BUTTON_LUAEDIT,58,31,46,16
END
VIDEOCONFIG DIALOGEX 65520, 76, 511, 166
VIDEOCONFIG DIALOGEX 65520, 76, 511, 170
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Video Configuration"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
GROUPBOX "Full Screen Settings",65453,5,3,171,137,WS_GROUP
GROUPBOX "Full Screen Settings",65453,5,3,171,141,WS_GROUP
CONTROL "Full Screen (Alt + Enter or double-click)",IDC_VIDEOCONFIG_FS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,15,157,12
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,15,157,12
CONTROL "Enter full screen mode after game is loaded",IDC_VIDEOCONFIG_AUTO_FS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,29,154,12
LTEXT "Sync method:",65452,12,108,51,10
COMBOBOX IDC_VIDEOCONFIG_SYNC_METHOD_FS,67,106,95,50,CBS_DROPDOWNLIST | WS_TABSTOP
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,29,154,12
LTEXT "Sync method:",65452,11,112,51,10
COMBOBOX IDC_VIDEOCONFIG_SYNC_METHOD_FS,66,110,95,50,CBS_DROPDOWNLIST | WS_TABSTOP
CONTROL "Disable hardware acceleration",IDC_DISABLE_HW_ACCEL_FS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,123,147,12
LTEXT "Mode:",13,12,67,23,9
EDITTEXT IDC_VIDEOCONFIG_XRES,37,65,27,13,ES_RIGHT
LTEXT "by",12,68,67,11,9
EDITTEXT IDC_VIDEOCONFIG_YRES,80,65,27,13,ES_RIGHT
LTEXT "@",11,111,67,11,9
COMBOBOX IDC_VIDEOCONFIG_BPP,123,65,32,12,CBS_DROPDOWNLIST | WS_TABSTOP
LTEXT "bpp",10,158,67,14,9
LTEXT "Special scaler:",65444,12,91,52,9
COMBOBOX IDC_VIDEOCONFIG_SCALER_FS,67,89,95,46,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Windowed Settings",65441,182,3,164,137,WS_GROUP
LTEXT "Size Multiplier:",65440,189,21,50,8
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,127,147,12
LTEXT "Mode:",13,11,67,23,9
EDITTEXT IDC_VIDEOCONFIG_XRES,36,65,27,13,ES_RIGHT
LTEXT "by",12,67,67,11,9
EDITTEXT IDC_VIDEOCONFIG_YRES,79,65,27,13,ES_RIGHT
LTEXT "@",11,110,67,11,9
COMBOBOX IDC_VIDEOCONFIG_BPP,122,65,32,12,CBS_DROPDOWNLIST | WS_TABSTOP
LTEXT "bpp",10,157,67,14,9
LTEXT "Special scaler:",65444,11,95,52,9
COMBOBOX IDC_VIDEOCONFIG_SCALER_FS,66,93,95,46,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Windowed Settings",65441,182,3,164,141,WS_GROUP
LTEXT "Size Multiplier:",65440,190,22,50,8
CTEXT "X:",65439,253,10,26,8
CTEXT "Y:",65438,304,10,26,8
EDITTEXT IDC_WINSIZE_MUL_X,244,20,44,12,ES_AUTOHSCROLL
EDITTEXT IDC_WINSIZE_MUL_Y,295,20,44,12,ES_AUTOHSCROLL
CONTROL "Force integral scaling factors",IDC_FORCE_INT_VIDEO_SCALARS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,50,136,12
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,50,136,12
CONTROL "Force aspect ratio correction",IDC_FORCE_ASPECT_CORRECTION,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,64,136,12
LTEXT "Special scaler:",65429,189,91,51,9
COMBOBOX IDC_VIDEOCONFIG_SCALER_WIN,245,89,93,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Sync method:",65437,189,108,51,9
COMBOBOX IDC_VIDEOCONFIG_SYNC_METHOD_WIN,245,106,93,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,64,136,12
LTEXT "Special scaler:",65429,188,95,51,9
COMBOBOX IDC_VIDEOCONFIG_SCALER_WIN,243,93,93,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Sync method:",65437,188,112,51,9
COMBOBOX IDC_VIDEOCONFIG_SYNC_METHOD_WIN,243,110,93,47,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Disable hardware acceleration",IDC_DISABLE_HW_ACCEL_WIN,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,189,123,146,12
GROUPBOX "Drawing Area",65494,351,46,154,65,WS_GROUP
LTEXT "First line:",65436,371,64,40,9
LTEXT "Last line:",65435,371,80,40,9
CTEXT "NTSC",65434,417,53,27,8
CTEXT "PAL",65433,471,53,27,8
EDITTEXT IDC_SCANLINE_FIRST_NTSC,418,62,27,12,ES_RIGHT
EDITTEXT IDC_SCANLINE_LAST_NTSC,418,79,27,12,ES_RIGHT
EDITTEXT IDC_SCANLINE_FIRST_PAL,471,62,27,12,ES_RIGHT
EDITTEXT IDC_SCANLINE_LAST_PAL,471,79,27,12,ES_RIGHT
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,127,146,12
GROUPBOX "Drawing Area",65494,351,50,154,65,WS_GROUP
LTEXT "First line:",65436,367,68,40,9
LTEXT "Last line:",65435,367,84,40,9
CTEXT "NTSC",65434,413,57,27,8
CTEXT "PAL",65433,465,57,27,8
EDITTEXT IDC_SCANLINE_FIRST_NTSC,414,66,27,12,ES_RIGHT
EDITTEXT IDC_SCANLINE_LAST_NTSC,414,83,27,12,ES_RIGHT
EDITTEXT IDC_SCANLINE_FIRST_PAL,465,66,27,12,ES_RIGHT
EDITTEXT IDC_SCANLINE_LAST_PAL,465,83,27,12,ES_RIGHT
CONTROL "Clip left and right sides (8 px on each)",IDC_VIDEOCONFIG_CLIPSIDES,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,359,94,140,12
DEFPUSHBUTTON "Close",ID_CANCEL,449,146,56,14
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,357,98,140,12
DEFPUSHBUTTON "Close",ID_CANCEL,449,150,56,14
CONTROL "Allow more than 8 sprites per scanline",IDC_VIDEOCONFIG_NO8LIM,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,359,124,138,11
GROUPBOX "Emulation",65430,351,113,154,27,WS_GROUP
CONTROL "Best Fit",IDC_VIDEOCONFIG_BESTFIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,359,14,66,12
CONTROL "Hide mouse cursor",IDC_VIDEOCONFIG_HIDEMOUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,43,87,12
GROUPBOX "Aspect ratio",65495,351,3,154,42,WS_GROUP
CONTROL "Use console BG color for empty areas",IDC_VIDEOCONFIG_CONSOLE_BGCOLOR,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,359,28,137,12
CONTROL "TV Aspect (4:3)",IDC_VIDEOCONFIG_TVASPECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,431,14,66,12
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,357,128,138,11
GROUPBOX "Emulation",65430,351,117,154,27,WS_GROUP
CONTROL "Best Fit",IDC_VIDEOCONFIG_BESTFIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,357,14,41,12
CONTROL "Hide mouse cursor",IDC_VIDEOCONFIG_HIDEMOUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,43,87,12
GROUPBOX "Aspect ratio",65495,351,3,154,45,WS_GROUP
CONTROL "BG color",IDC_VIDEOCONFIG_CONSOLE_BGCOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,401,14,44,12
CONTROL "TV Aspect",IDC_VIDEOCONFIG_TVASPECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,357,29,48,12
GROUPBOX "When resizing the window",65431,188,38,152,43,WS_GROUP
CONTROL "Square pixels",IDC_VIDEOCONFIG_SQUARE_PIXELS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,448,14,55,12
EDITTEXT IDC_TVASPECT_X,407,28,41,12,ES_AUTOHSCROLL
EDITTEXT IDC_TVASPECT_Y,458,28,41,12,ES_AUTOHSCROLL
CTEXT "/",IDC_STATIC_SLASHTEXT,449,31,8,8
END
IDD_RAMSEARCH DIALOGEX 0, 0, 287, 292

View File

@ -122,6 +122,7 @@
#define IDC_DEBUGGER_BREAK_ON_BAD_OP 110
#define IDC_ROMPATCHER_BTN_APPLY 110
#define LBL_CDLOGGER_RENDERCOUNT 110
#define IDC_VIDEOCONFIG_SQUARE_PIXELS 110
#define MENU_LOAD_STATE 111
#define CB_DISABLE_SCREEN_SAVER 111
#define BTN_FAM 111
@ -162,7 +163,7 @@
#define CHEAT_CONTEXT_GOTOINHEXEDITOR 119
#define IDC_DEBUGGER_BREAK_ON_INSTRUCTIONS 119
#define IDC_CHECK_LOG_FRAME_NUMBER 119
#define IDC_CHECK_LOG_FRAMES_COUNT 119
#define IDC_CHECK_LOG_FRAMES_COUNT 119
#define IDC_CHECK_LOG_CYCLES_COUNT 120
#define IDC_CHECK_LOG_FRAME_NUMBER3 121
#define IDC_CHECK_LOG_INSTRUCTIONS_COUNT 121
@ -430,8 +431,11 @@
#define IDC_FORCE_ASPECT_CORRECTION 403
#define IDC_DEBUGGER_VAL_S 403
#define IDC_VIDEOCONFIG_ASPECT_X 404
#define IDC_TVASPECT_X 404
#define IDC_VIDEOCONFIG_ASPECT_Y 405
#define IDC_DEBUGGER_VAL_S2 405
#define IDC_TVASPECT_HEIGHT 405
#define IDC_TVASPECT_Y 405
#define IDC_VIDEOCONFIG_SCALER_WIN 406
#define CHECK_ENABLE_MICROPHONE 407
#define CTL_TINT_TRACKBAR 500
@ -1179,6 +1183,7 @@
#define IDC_DEBUGGER_ICONTRAY 55535
#define MW_ValueLabel2 65423
#define MW_ValueLabel1 65426
#define IDC_STATIC_SLASHTEXT 65442
#define IDC_BOOKMARK_NAME_TEXT 65535
#define ID_CDL 65535

View File

@ -248,34 +248,59 @@ void recalculateBestFitRect(int width, int height)
{
if (!lpDD7)
return; // DirectDraw isn't initialized yet
double screen_width = VNSWID;
double screen_height = FSettings.TotalScanlines();
if (eoptions & EO_TVASPECT)
screen_width = ceil(screen_height * (screen_width / 256) * (tvAspectX / tvAspectY));
int center_x = width / 2;
int center_y = height / 2;
// calculate bestfitRect
double current_aspectratio = (double)width / (double)height;
double needed_aspectratio = (double)(VNSWID) / (double)(FSettings.TotalScanlines());
if (eoptions & EO_TVASPECT)
needed_aspectratio = ((double)VNSWID / 256) * ((double)4 / 3);
if (current_aspectratio == needed_aspectratio)
{
bestfitRect.left = 0;
bestfitRect.right = width;
bestfitRect.top = 0;
bestfitRect.bottom = height;
} else if (current_aspectratio > needed_aspectratio)
double needed_aspectratio = screen_width / screen_height;
if (current_aspectratio >= needed_aspectratio)
{
// the window is wider than emulated screen
bestfitRect.top = 0;
bestfitRect.bottom = height;
int center_x = width / 2;
double new_width = ((double)height * needed_aspectratio);
bestfitRect.left = center_x - (new_width / 2);
double new_height = height;
if (eoptions & EO_SQUAREPIXELS)
{
new_height = int((double)height / screen_height) * screen_height;
if (new_height == 0)
new_height = height;
}
bestfitRect.top = center_y - (int)(new_height / 2);
bestfitRect.bottom = bestfitRect.top + new_height;
double new_width = (new_height * needed_aspectratio);
if (eoptions & EO_SQUAREPIXELS && !(eoptions & EO_TVASPECT))
{
int new_width_integer = int((double)new_width / screen_width) * screen_width;
if (new_width_integer > 0)
new_width = new_width_integer;
}
bestfitRect.left = center_x - (int)(new_width / 2);
bestfitRect.right = bestfitRect.left + new_width;
} else
{
// the window is taller than emulated screen
bestfitRect.left = 0;
bestfitRect.right = width;
int center_y = height / 2;
double new_height = ((double)width / needed_aspectratio);
bestfitRect.top = center_y - (new_height / 2);
double new_width = width;
if (eoptions & EO_SQUAREPIXELS)
{
new_width = int((double)width / screen_width) * screen_width;
if (new_width == 0)
new_width = width;
}
bestfitRect.left = center_x - (int)(new_width / 2);
bestfitRect.right = bestfitRect.left + new_width;
double new_height = (new_width / needed_aspectratio);
if (eoptions & EO_SQUAREPIXELS && !(eoptions & EO_TVASPECT))
{
int new_height_integer = int((double)new_height / screen_height) * screen_height;
if (new_height_integer > 0)
new_height = new_height_integer;
}
bestfitRect.top = center_y - (int)(new_height / 2);
bestfitRect.bottom = bestfitRect.top + new_height;
}
}
@ -646,7 +671,8 @@ static void BlitScreenWindow(unsigned char *XBuf)
blitRect.top += bestfitRect.bottom;
blitRect.bottom = wrect.bottom;
IDirectDrawSurface7_Blt(lpDDSPrimary, &blitRect, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx);
} else
}
if (bestfitRect.left)
{
// left border
blitRect.top = wrect.top;
@ -984,7 +1010,8 @@ static void BlitScreenFull(uint8 *XBuf)
borderRect.top += bestfitRect.bottom;
borderRect.bottom = drect.bottom;
IDirectDrawSurface7_Blt(lpDDSPrimary, &borderRect, NULL, NULL, DDBLT_COLORFILL | DDBLT_ASYNC, &blitfx);
} else
}
if (bestfitRect.left)
{
// left border
borderRect.top = drect.top;
@ -1169,17 +1196,17 @@ static int RecalcCustom(void)
BOOL SetDlgItemDouble(HWND hDlg, int item, double value)
{
char buf[9]; //mbg merge 7/19/06 changed to 9 to leave room for \0
char buf[16];
sprintf(buf,"%.6f",value);
return SetDlgItemText(hDlg, item, buf); //mbg merge 7/17/06 added this return value
return SetDlgItemText(hDlg, item, buf);
}
double GetDlgItemDouble(HWND hDlg, int item)
{
char buf[8];
char buf[16];
double ret = 0;
GetDlgItemText(hDlg, item, buf, 8);
GetDlgItemText(hDlg, item, buf, 15);
sscanf(buf,"%lf",&ret);
return(ret);
}
@ -1248,12 +1275,15 @@ BOOL CALLBACK VideoConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
if(eoptions&EO_BESTFIT)
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_BESTFIT, BST_CHECKED);
if(eoptions&EO_TVASPECT)
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_TVASPECT, BST_CHECKED);
if(eoptions&EO_BGCOLOR)
CheckDlgButton(hwndDlg,IDC_VIDEOCONFIG_CONSOLE_BGCOLOR,BST_CHECKED);
if(eoptions&EO_SQUAREPIXELS)
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_SQUARE_PIXELS, BST_CHECKED);
if(eoptions&EO_TVASPECT)
CheckDlgButton(hwndDlg, IDC_VIDEOCONFIG_TVASPECT, BST_CHECKED);
if(disvaccel&1)
CheckDlgButton(hwndDlg,IDC_DISABLE_HW_ACCEL_WIN,BST_CHECKED);
@ -1275,8 +1305,8 @@ BOOL CALLBACK VideoConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
SetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_X, winsizemulx);
SetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_Y, winsizemuly);
//SetDlgItemDouble(hwndDlg, IDC_VIDEOCONFIG_ASPECT_X, saspectw);
//SetDlgItemDouble(hwndDlg, IDC_VIDEOCONFIG_ASPECT_Y, saspecth);
SetDlgItemDouble(hwndDlg, IDC_TVASPECT_X, tvAspectX);
SetDlgItemDouble(hwndDlg, IDC_TVASPECT_Y, tvAspectY);
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_ADDSTRING,0,(LPARAM)(LPSTR)"<none>");
SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_ADDSTRING,0,(LPARAM)(LPSTR)"<none>");
@ -1336,16 +1366,21 @@ gornk:
else
eoptions &= ~EO_BESTFIT;
if (IsDlgButtonChecked(hwndDlg, IDC_VIDEOCONFIG_TVASPECT) == BST_CHECKED)
eoptions |= EO_TVASPECT;
else
eoptions &= ~EO_TVASPECT;
if (IsDlgButtonChecked(hwndDlg, IDC_VIDEOCONFIG_CONSOLE_BGCOLOR) == BST_CHECKED)
eoptions |= EO_BGCOLOR;
else
eoptions &= ~EO_BGCOLOR;
if (IsDlgButtonChecked(hwndDlg, IDC_VIDEOCONFIG_SQUARE_PIXELS) == BST_CHECKED)
eoptions |= EO_SQUAREPIXELS;
else
eoptions &= ~EO_SQUAREPIXELS;
if (IsDlgButtonChecked(hwndDlg, IDC_VIDEOCONFIG_TVASPECT) == BST_CHECKED)
eoptions |= EO_TVASPECT;
else
eoptions &= ~EO_TVASPECT;
if(IsDlgButtonChecked(hwndDlg,IDC_VIDEOCONFIG_NO8LIM)==BST_CHECKED)
eoptions|=EO_NOSPRLIM;
else
@ -1410,11 +1445,15 @@ gornk:
if(IsDlgButtonChecked(hwndDlg,IDC_FORCE_ASPECT_CORRECTION)==BST_CHECKED)
eoptions|=EO_FORCEASPECT;
winsizemulx=GetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_X);
winsizemuly=GetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_Y);
//saspectw=GetDlgItemDouble(hwndDlg, IDC_VIDEOCONFIG_ASPECT_X);
//saspecth=GetDlgItemDouble(hwndDlg, IDC_VIDEOCONFIG_ASPECT_Y);
winsizemulx = GetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_X);
winsizemuly = GetDlgItemDouble(hwndDlg, IDC_WINSIZE_MUL_Y);
FixWXY(0);
tvAspectX = GetDlgItemDouble(hwndDlg, IDC_TVASPECT_X);
tvAspectY = GetDlgItemDouble(hwndDlg, IDC_TVASPECT_Y);
if (tvAspectX < 0.1)
tvAspectX = 0.1;
if (tvAspectY < 0.1)
tvAspectY = 0.1;
winsync=SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_WIN,CB_GETCURSEL,0,(LPARAM)(LPSTR)0);
fssync=SendDlgItemMessage(hwndDlg,IDC_VIDEOCONFIG_SYNC_METHOD_FS,CB_GETCURSEL,0,(LPARAM)(LPSTR)0);

View File

@ -335,17 +335,15 @@ static void ConvertFCM(HWND hwndOwner)
void CalcWindowSize(RECT *al)
{
double screen_width = VNSWID;
double screen_height = FSettings.TotalScanlines();
if (eoptions & EO_TVASPECT)
screen_width = ceil(screen_height * (screen_width / 256) * (tvAspectX / tvAspectY));
al->left = 0;
al->top = 0;
al->bottom = FSettings.TotalScanlines();
if (eoptions & EO_TVASPECT)
al->right = al->bottom * winsizemulx * ((double)VNSWID / 256) * ((double)4 / 3);
else
al->right = VNSWID * winsizemulx;
al->bottom *= winsizemuly;
al->bottom += menuYoffset;
al->right = ceil(screen_width * winsizemulx);
al->bottom = menuYoffset + ceil(screen_height * winsizemuly);
AdjustWindowRectEx(al,
GetWindowLong(hAppWnd, GWL_STYLE),
@ -1123,6 +1121,9 @@ void GetMouseData(uint32 (&md)[3])
{
extern RECT bestfitRect;
double screen_width = VNSWID;
double screen_height = FSettings.TotalScanlines();
if (eoptions & EO_BESTFIT && (bestfitRect.top || bestfitRect.left))
{
if ((int)mousex <= bestfitRect.left)
@ -1130,20 +1131,20 @@ void GetMouseData(uint32 (&md)[3])
md[0] = 0;
} else if ((int)mousex >= bestfitRect.right)
{
md[0] = VNSWID;
md[0] = screen_width - 1;
} else
{
md[0] = VNSWID * (mousex - bestfitRect.left) / (bestfitRect.right - bestfitRect.left);
md[0] = screen_width * (mousex - bestfitRect.left) / (bestfitRect.right - bestfitRect.left);
}
if ((int)mousey <= bestfitRect.top)
{
md[1] = 0;
} else if ((int)mousey >= bestfitRect.bottom)
{
md[1] = FSettings.TotalScanlines();
md[1] = screen_height - 1;
} else
{
md[1] = FSettings.TotalScanlines() * (mousey - bestfitRect.top) / (bestfitRect.bottom - bestfitRect.top);
md[1] = screen_height * (mousey - bestfitRect.top) / (bestfitRect.bottom - bestfitRect.top);
}
} else
{
@ -1154,20 +1155,20 @@ void GetMouseData(uint32 (&md)[3])
md[0] = 0;
} else if ((int)mousex >= client_rect.right)
{
md[0] = VNSWID;
md[0] = screen_width - 1;
} else
{
md[0] = VNSWID * (mousex - client_rect.left) / (client_rect.right - client_rect.left);
md[0] = screen_width * (mousex - client_rect.left) / (client_rect.right - client_rect.left);
}
if ((int)mousey <= client_rect.top)
{
md[1] = 0;
} else if ((int)mousey >= client_rect.bottom)
{
md[1] = FSettings.TotalScanlines();
md[1] = screen_height - 1;
} else
{
md[1] = FSettings.TotalScanlines() * (mousey - client_rect.top) / (client_rect.bottom - client_rect.top);
md[1] = screen_height * (mousey - client_rect.top) / (client_rect.bottom - client_rect.top);
}
}
md[0] += VNSCLIP;
@ -2431,30 +2432,15 @@ void FixWXY(int pref, bool shift_held)
{
if (eoptions & EO_FORCEASPECT)
{
/* First, make sure the ratio is valid, and if it's not, change
it so that it doesn't break everything.
*/
if(saspectw < 0.01) saspectw = 0.01;
if(saspecth < 0.01) saspecth = 0.01;
if((saspectw / saspecth) > 100) saspecth = saspectw;
if((saspecth / saspectw) > 100) saspectw = saspecth;
if((saspectw / saspecth) < 0.1) saspecth = saspectw;
if((saspecth / saspectw) > 0.1) saspectw = saspecth;
if(!pref)
{
winsizemuly = winsizemulx * (saspecth / saspectw);
} else
{
winsizemulx = winsizemuly * (saspectw / saspecth);
}
if (pref == 0)
winsizemuly = winsizemulx;
else
winsizemulx = winsizemuly;
}
if(winsizemulx<0.1)
winsizemulx=0.1;
if(winsizemuly<0.1)
winsizemuly=0.1;
if (winsizemulx < 0.1)
winsizemulx = 0.1;
if (winsizemuly < 0.1)
winsizemuly = 0.1;
// round to integer values
if (((eoptions & EO_FORCEISCALE) && !shift_held) || (!(eoptions & EO_FORCEISCALE) && shift_held))
@ -2474,8 +2460,13 @@ void FixWXY(int pref, bool shift_held)
winsizemuly = y;
}
if(winsizemulx > 100) winsizemulx = 100;
if(winsizemuly > 100) winsizemuly = 100;
/*
// is this really necessary?
if (winsizemulx > 100)
winsizemulx = 100;
if (winsizemuly > 100)
winsizemuly = 100;
*/
}
void UpdateFCEUWindow(void)