From 57287686dbf782c431a5da309d4d70be7a5428ec Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 26 Sep 2024 19:55:06 +0200 Subject: [PATCH] add new "center_window" setting --- inc/config.h | 1 + inc/dd.h | 4 ++++ src/config.c | 5 +++++ src/dd.c | 9 +++++++-- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/inc/config.h b/inc/config.h index bdb7d9b..168c54d 100644 --- a/inc/config.h +++ b/inc/config.h @@ -42,6 +42,7 @@ typedef struct CNCDDRAWCONFIG int d3d9_filter; int anti_aliased_fonts_min_size; int min_font_size; + int center_window; BOOL vhack; char screenshot_dir[MAX_PATH]; BOOL toggle_borderless; diff --git a/inc/dd.h b/inc/dd.h index e5904bb..36f1ca6 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -52,6 +52,10 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute #define LIMIT_BLTFAST 2 #define LIMIT_UNLOCK 3 +#define CENTER_WINDOW_NEVER 0 +#define CENTER_WINDOW_AUTO 1 +#define CENTER_WINDOW_ALWAYS 2 + #ifndef CREATE_WAITABLE_TIMER_HIGH_RESOLUTION #define CREATE_WAITABLE_TIMER_HIGH_RESOLUTION 0x00000002 #endif diff --git a/src/config.c b/src/config.c index 8ec4c85..0ea4a2f 100644 --- a/src/config.c +++ b/src/config.c @@ -54,6 +54,7 @@ void cfg_load() GET_INT(g_config.d3d9_filter, "d3d9_filter", FILTER_CUBIC); GET_INT(g_config.anti_aliased_fonts_min_size, "anti_aliased_fonts_min_size", 13); GET_INT(g_config.min_font_size, "min_font_size", 0); + GET_INT(g_config.center_window, "center_window", CENTER_WINDOW_AUTO); GET_BOOL(g_config.vhack, "vhack", FALSE); GET_STRING("screenshotdir", ".\\Screenshots\\", g_config.screenshot_dir, sizeof(g_config.screenshot_dir)); GET_BOOL(g_config.toggle_borderless, "toggle_borderless", FALSE); @@ -250,6 +251,10 @@ static void cfg_create_ini() "; Raise the size of small fonts to X\n" "min_font_size=0\n" "\n" + "; Center window to screen when game changes the display resolution\n" + "; Possible values: 0 = never center, 1 = automatic, 2 = always center\n" + "center_window=1\n" + "\n" "; Enable upscale hack for high resolution patches (Supports C&C1, Red Alert 1, Worms 2 and KKND Xtreme)\n" "vhack=false\n" "\n" diff --git a/src/dd.c b/src/dd.c index 0a89649..4ff0789 100644 --- a/src/dd.c +++ b/src/dd.c @@ -710,9 +710,14 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl g_ddraw.render.height = g_config.window_rect.bottom; /* temporary fix: center window for games that keep changing their resolution */ - if ((g_ddraw.width || g_config.infantryhack) && + if (g_config.center_window && + (g_ddraw.width || g_config.infantryhack || g_config.center_window == CENTER_WINDOW_ALWAYS) && (g_ddraw.width != dwWidth || g_ddraw.height != dwHeight) && - (dwWidth > g_config.window_rect.right || dwHeight > g_config.window_rect.bottom)) + ( + dwWidth > g_config.window_rect.right || + dwHeight > g_config.window_rect.bottom || + g_config.center_window == CENTER_WINDOW_ALWAYS) + ) { g_config.window_rect.left = -32000; g_config.window_rect.top = -32000;