From 96b4de92af8a112c0b1dabfd8091ef160808f436 Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Mon, 23 Sep 2024 03:07:37 -0700 Subject: [PATCH] Only call GetDpiForWindow if it's actually available apparently this is limited to windows 10 1607+ --- .../DisplayManager/DisplayManager.cs | 31 +++++++++++++++---- src/BizHawk.Common/Win32/Win32Imports.cs | 3 -- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs index 49ae779f51..308b1326cd 100644 --- a/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs +++ b/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs @@ -11,6 +11,29 @@ namespace BizHawk.Client.EmuHawk { public class DisplayManager : DisplayManagerBase { + // this function requires at least windows 10 + private static readonly unsafe delegate* unmanaged[Stdcall] _getDpiForWindow; + + static DisplayManager() + { + if (OSTailoredCode.IsUnixHost) + { + return; + } + + var lib = OSTailoredCode.LinkedLibManager.LoadOrZero("user32.dll"); + if (lib == IntPtr.Zero) + { + return; + } + + unsafe + { + _getDpiForWindow = (delegate* unmanaged[Stdcall]) + OSTailoredCode.LinkedLibManager.GetProcAddrOrZero(lib, "GetDpiForWindow"); + } + } + private readonly Func _getIsSecondaryThrottlingDisabled; private bool? _lastVsyncSetting; @@ -51,12 +74,8 @@ namespace BizHawk.Client.EmuHawk public override Size GetPanelNativeSize() => _presentationPanel.NativeSize; - protected override int GetGraphicsControlDpi() - { - return OSTailoredCode.IsUnixHost - ? DEFAULT_DPI - : Win32Imports.GetDpiForWindow(_graphicsControl.Handle); - } + protected override unsafe int GetGraphicsControlDpi() + => _getDpiForWindow == null ? DEFAULT_DPI : _getDpiForWindow(_graphicsControl.Handle); protected override Point GraphicsControlPointToClient(Point p) => _graphicsControl.PointToClient(p); diff --git a/src/BizHawk.Common/Win32/Win32Imports.cs b/src/BizHawk.Common/Win32/Win32Imports.cs index d12a375163..cb784a3d1c 100644 --- a/src/BizHawk.Common/Win32/Win32Imports.cs +++ b/src/BizHawk.Common/Win32/Win32Imports.cs @@ -67,8 +67,5 @@ namespace BizHawk.Common [DllImport("user32.dll", ExactSpelling = true)] public static extern int TrackPopupMenuEx(IntPtr hmenu, TPM fuFlags, int x, int y, IntPtr hwnd, IntPtr lptpm); - - [DllImport("user32.dll", ExactSpelling = true)] - public static extern int GetDpiForWindow(IntPtr hwnd); } } \ No newline at end of file