mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 22:14:49 +01:00
add experimental aspect_ratio setting (hidden for now)
This commit is contained in:
parent
e23a0ce1d5
commit
c7e4b81ad7
@ -29,6 +29,7 @@ typedef struct CNCDDRAWCONFIG
|
|||||||
BOOL windowed;
|
BOOL windowed;
|
||||||
BOOL maintas;
|
BOOL maintas;
|
||||||
BOOL boxing;
|
BOOL boxing;
|
||||||
|
char aspect_ratio[16];
|
||||||
int maxfps;
|
int maxfps;
|
||||||
BOOL vsync;
|
BOOL vsync;
|
||||||
BOOL adjmouse;
|
BOOL adjmouse;
|
||||||
|
@ -39,6 +39,7 @@ void cfg_load()
|
|||||||
GET_BOOL(g_config.windowed, "windowed", FALSE);
|
GET_BOOL(g_config.windowed, "windowed", FALSE);
|
||||||
GET_BOOL(g_config.maintas, "maintas", FALSE);
|
GET_BOOL(g_config.maintas, "maintas", FALSE);
|
||||||
GET_BOOL(g_config.boxing, "boxing", FALSE);
|
GET_BOOL(g_config.boxing, "boxing", FALSE);
|
||||||
|
GET_STRING("aspect_ratio", "", g_config.aspect_ratio, sizeof(g_config.aspect_ratio));
|
||||||
GET_INT(g_config.maxfps, "maxfps", -1);
|
GET_INT(g_config.maxfps, "maxfps", -1);
|
||||||
GET_BOOL(g_config.vsync, "vsync", FALSE);
|
GET_BOOL(g_config.vsync, "vsync", FALSE);
|
||||||
GET_BOOL(g_config.adjmouse, "adjmouse", TRUE);
|
GET_BOOL(g_config.adjmouse, "adjmouse", TRUE);
|
||||||
@ -120,6 +121,9 @@ void cfg_load()
|
|||||||
if (g_config.lock_mouse_top_left)
|
if (g_config.lock_mouse_top_left)
|
||||||
g_config.adjmouse = FALSE;
|
g_config.adjmouse = FALSE;
|
||||||
|
|
||||||
|
if (g_config.aspect_ratio[0])
|
||||||
|
g_config.maintas = TRUE;
|
||||||
|
|
||||||
ini_free(&g_config.ini);
|
ini_free(&g_config.ini);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
src/dd.c
20
src/dd.c
@ -581,6 +581,8 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
|
|||||||
if (!dwHeight)
|
if (!dwHeight)
|
||||||
dwHeight = g_ddraw.height ? g_ddraw.height : 600;
|
dwHeight = g_ddraw.height ? g_ddraw.height : 600;
|
||||||
|
|
||||||
|
//if (dwHeight == 400) dwHeight = 480;
|
||||||
|
|
||||||
if (!dwBPP)
|
if (!dwBPP)
|
||||||
dwBPP = g_ddraw.bpp ? g_ddraw.bpp : 16;
|
dwBPP = g_ddraw.bpp ? g_ddraw.bpp : 16;
|
||||||
|
|
||||||
@ -859,8 +861,22 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
|
|||||||
}
|
}
|
||||||
else if (g_config.maintas)
|
else if (g_config.maintas)
|
||||||
{
|
{
|
||||||
double dst_ar = (double)g_ddraw.height / g_ddraw.width;
|
double dst_ar;
|
||||||
double src_ar = (double)g_ddraw.render.height / g_ddraw.render.width;
|
double src_ar = (double)g_ddraw.render.height / g_ddraw.render.width;;
|
||||||
|
|
||||||
|
if (g_config.aspect_ratio[0])
|
||||||
|
{
|
||||||
|
char* e = &g_config.aspect_ratio[0];
|
||||||
|
|
||||||
|
DWORD cx = strtoul(e, &e, 0);
|
||||||
|
DWORD cy = strtoul(e + 1, &e, 0);
|
||||||
|
|
||||||
|
dst_ar = (double)cy / cx;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dst_ar = (double)g_ddraw.height / g_ddraw.width;
|
||||||
|
}
|
||||||
|
|
||||||
g_ddraw.render.viewport.width = g_ddraw.render.width;
|
g_ddraw.render.viewport.width = g_ddraw.render.width;
|
||||||
g_ddraw.render.viewport.height = (int)round(dst_ar * g_ddraw.render.viewport.width);
|
g_ddraw.render.viewport.height = (int)round(dst_ar * g_ddraw.render.viewport.width);
|
||||||
|
16
src/utils.c
16
src/utils.c
@ -622,9 +622,23 @@ void util_toggle_maximize()
|
|||||||
int w = dst_rc.right - dst_rc.left;
|
int w = dst_rc.right - dst_rc.left;
|
||||||
int h = dst_rc.bottom - dst_rc.top;
|
int h = dst_rc.bottom - dst_rc.top;
|
||||||
|
|
||||||
double dst_ar = (double)g_ddraw.height / g_ddraw.width;
|
double dst_ar;
|
||||||
double src_ar = (double)h / w;
|
double src_ar = (double)h / w;
|
||||||
|
|
||||||
|
if (g_config.aspect_ratio[0])
|
||||||
|
{
|
||||||
|
char* e = &g_config.aspect_ratio[0];
|
||||||
|
|
||||||
|
DWORD cx = strtoul(e, &e, 0);
|
||||||
|
DWORD cy = strtoul(e + 1, &e, 0);
|
||||||
|
|
||||||
|
dst_ar = (double)cy / cx;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dst_ar = (double)g_ddraw.height / g_ddraw.width;
|
||||||
|
}
|
||||||
|
|
||||||
dst_rc.top = 0;
|
dst_rc.top = 0;
|
||||||
dst_rc.left = 0;
|
dst_rc.left = 0;
|
||||||
dst_rc.right = w;
|
dst_rc.right = w;
|
||||||
|
@ -317,8 +317,24 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
real_GetWindowLongA(hWnd, GWL_EXSTYLE)) &&
|
real_GetWindowLongA(hWnd, GWL_EXSTYLE)) &&
|
||||||
SetRect(&clientrc, 0, 0, clientrc.right - clientrc.left, clientrc.bottom - clientrc.top))
|
SetRect(&clientrc, 0, 0, clientrc.right - clientrc.left, clientrc.bottom - clientrc.top))
|
||||||
{
|
{
|
||||||
double scaleH = (double)g_ddraw.height / g_ddraw.width;
|
double scale_h;
|
||||||
double scaleW = (double)g_ddraw.width / g_ddraw.height;
|
double scale_w;
|
||||||
|
|
||||||
|
if (g_config.aspect_ratio[0])
|
||||||
|
{
|
||||||
|
char* e = &g_config.aspect_ratio[0];
|
||||||
|
|
||||||
|
DWORD cx = strtoul(e, &e, 0);
|
||||||
|
DWORD cy = strtoul(e + 1, &e, 0);
|
||||||
|
|
||||||
|
scale_h = (double)cy / cx;
|
||||||
|
scale_w = (double)cx / cy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scale_h = (double)g_ddraw.height / g_ddraw.width;
|
||||||
|
scale_w = (double)g_ddraw.width / g_ddraw.height;
|
||||||
|
}
|
||||||
|
|
||||||
switch (wParam)
|
switch (wParam)
|
||||||
{
|
{
|
||||||
@ -327,19 +343,19 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
|
|||||||
case WMSZ_LEFT:
|
case WMSZ_LEFT:
|
||||||
case WMSZ_RIGHT:
|
case WMSZ_RIGHT:
|
||||||
{
|
{
|
||||||
windowrc->bottom += (LONG)round(scaleH * clientrc.right - clientrc.bottom);
|
windowrc->bottom += (LONG)round(scale_h * clientrc.right - clientrc.bottom);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WMSZ_TOP:
|
case WMSZ_TOP:
|
||||||
case WMSZ_BOTTOM:
|
case WMSZ_BOTTOM:
|
||||||
{
|
{
|
||||||
windowrc->right += (LONG)round(scaleW * clientrc.bottom - clientrc.right);
|
windowrc->right += (LONG)round(scale_w * clientrc.bottom - clientrc.right);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WMSZ_TOPRIGHT:
|
case WMSZ_TOPRIGHT:
|
||||||
case WMSZ_TOPLEFT:
|
case WMSZ_TOPLEFT:
|
||||||
{
|
{
|
||||||
windowrc->top -= (LONG)round(scaleH * clientrc.right - clientrc.bottom);
|
windowrc->top -= (LONG)round(scale_h * clientrc.right - clientrc.bottom);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user