From e2e6fab1efa6895256ac0ed4d5b054a88ad18077 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Tue, 23 Mar 2010 04:45:37 -0500 Subject: Cygwin/X: Make default DPI match native DPI Make the default DPI match the current Windows DPI setting. If that setting can't be retrieved, change the fallback DPI value from 75 dpi to 96 dpi. Mark the application as dpiAware in the manifest, which prevents dpi virtualization for high (>96) dpi values on Vista and later. Signed-off-by: Jon TURNEY Signed-off-by: Yaakov Selkowitz Reviewed-by: Colin Harrison --- hw/xwin/XWin.exe.manifest | 5 +++++ hw/xwin/win.h | 2 +- hw/xwin/winprocarg.c | 23 +++++++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) (limited to 'hw') diff --git a/hw/xwin/XWin.exe.manifest b/hw/xwin/XWin.exe.manifest index 221150d52..a0d4d7dae 100755 --- a/hw/xwin/XWin.exe.manifest +++ b/hw/xwin/XWin.exe.manifest @@ -13,4 +13,9 @@ /> + + + true + + diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 9bee9b64f..445bcab48 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -64,7 +64,7 @@ #define WIN_DEFAULT_BLACKPIXEL 0 #define WIN_DEFAULT_LINEBIAS 0 #define WIN_DEFAULT_E3B_TIME 50 /* milliseconds */ -#define WIN_DEFAULT_DPI 75 +#define WIN_DEFAULT_DPI 96 #define WIN_DEFAULT_REFRESH 0 #define WIN_DEFAULT_WIN_KILL TRUE #define WIN_DEFAULT_UNIX_KILL FALSE diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index ddfe1f5b7..0c24b083c 100644 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -88,12 +88,27 @@ winInitializeScreenDefaults(void) dwWidth = GetSystemMetrics (SM_CXSCREEN); dwHeight = GetSystemMetrics (SM_CYSCREEN); - winErrorFVerb (2, "winInitializeScreenDefaults - w %d h %d\n", - (int) dwWidth, (int) dwHeight); + winErrorFVerb(2, "winInitializeScreenDefaults - primary monitor w %d h %d\n", (int) dwWidth, (int) dwHeight); - /* Set a default DPI, if no parameter was passed */ + /* Set a default DPI, if no '-dpi' option was used */ if (monitorResolution == 0) - monitorResolution = WIN_DEFAULT_DPI; + { + HDC hdc = GetDC(NULL); + if (hdc) + { + int dpiX = GetDeviceCaps(hdc, LOGPIXELSX); + int dpiY = GetDeviceCaps(hdc, LOGPIXELSY); + + winErrorFVerb(2, "winInitializeDefaultScreens - native DPI x %d y %d\n", dpiX, dpiY); + monitorResolution = dpiY; + ReleaseDC(NULL, hdc); + } + else + { + winErrorFVerb(1, "winInitializeDefaultScreens - Failed to retrieve native DPI, falling back to default of %d DPI\n", WIN_DEFAULT_DPI); + monitorResolution = WIN_DEFAULT_DPI; + } + } defaultScreenInfo.iMonitor = 1; defaultScreenInfo.dwWidth = dwWidth; -- cgit v1.2.3