From fccd7c1dd05309a672690d0ddc39419dacd0c91c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net>
Date: Mon, 17 May 2021 12:59:03 -0400
Subject: [PATCH] Use the API to insist SyncTERM is "High DPI aware"

Microsoft wants us to use a manifest for this, but I really don't
feel like digging into however one uses manifest files when not
using the Microsoft build files.

Details here: https://docs.microsoft.com/en-us/windows/win32/hidpi/setting-the-default-dpi-awareness-for-a-process
---
 src/conio/sdl_con.c | 40 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 38 insertions(+), 2 deletions(-)

diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c
index 6228388b3c..b7b1e3065c 100644
--- a/src/conio/sdl_con.c
+++ b/src/conio/sdl_con.c
@@ -10,9 +10,7 @@
 #include "dirwrap.h"
 #include "xpbeep.h"
 #include "threadwrap.h"
-#ifdef __unix__
 #include <xp_dl.h>
-#endif
 
 #if (defined CIOLIB_IMPORTS)
  #undef CIOLIB_IMPORTS
@@ -469,6 +467,44 @@ int sdl_init(int mode)
 		cio_api.mode=fullscreen?CIOLIB_MODE_SDL_FULLSCREEN:CIOLIB_MODE_SDL;
 #ifdef _WIN32
 		FreeConsole();
+		// code that tells windows we're High DPI aware so it doesn't scale our windows
+		// taken from Yamagi Quake II
+
+		typedef enum D3_PROCESS_DPI_AWARENESS {
+			D3_PROCESS_DPI_UNAWARE = 0,
+			D3_PROCESS_SYSTEM_DPI_AWARE = 1,
+			D3_PROCESS_PER_MONITOR_DPI_AWARE = 2
+		} YQ2_PROCESS_DPI_AWARENESS;
+
+		/* For Vista, Win7 and Win8 */
+		BOOL(WINAPI *SetProcessDPIAware)(void) = NULL;
+
+		/* Win8.1 and later */
+		HRESULT(WINAPI *SetProcessDpiAwareness)(enum D3_PROCESS_DPI_AWARENESS dpiAwareness) = NULL;
+
+		const char* user32dll[] = {"User32", NULL};
+		dll_handle userDLL = xp_dlopen(user32dll, RTLD_LAZY, 0);
+
+		if (userDLL)
+		{
+			SetProcessDPIAware = xp_dlsym(userDLL, "SetProcessDPIAware");
+		}
+
+
+		const char* shcoredll[] = {"SHCore", NULL};
+		dll_handle shcoreDLL = xp_dlopen(shcoredll, RTLD_LAZY, 0);
+
+		if (shcoreDLL)
+		{
+			SetProcessDpiAwareness = xp_dlsym(shcoreDLL, "SetProcessDpiAwareness");
+		}
+
+		if (SetProcessDpiAwareness) {
+			SetProcessDpiAwareness(D3_PROCESS_PER_MONITOR_DPI_AWARE);
+		}
+		else if (SetProcessDPIAware) {
+			SetProcessDPIAware();
+		}
 #endif
 		cio_api.options |= CONIO_OPT_PALETTE_SETTING | CONIO_OPT_SET_TITLE | CONIO_OPT_SET_NAME | CONIO_OPT_SET_ICON;
 		return(0);
-- 
GitLab