diff options
| author | Simon Krauter <simon.krauter@dbaudio.com> | 2019-07-26 10:27:00 +0200 |
|---|---|---|
| committer | Simon Krauter <simon.krauter@dbaudio.com> | 2019-07-26 10:27:00 +0200 |
| commit | 6a39cee5037f0ca7ceaea499967efa456fb8f4b1 (patch) | |
| tree | da1a2da4c19545c9328a2fabcf5b84a5157831c4 /src/nigui/private/windows | |
| parent | bb09bfa401fd8bf435ebbde844a3ba765b153a05 (diff) | |
| download | NiGui-6a39cee5037f0ca7ceaea499967efa456fb8f4b1.tar.gz NiGui-6a39cee5037f0ca7ceaea499967efa456fb8f4b1.zip | |
Implemented High-DPI support for Windows.
Applications should use ``scaleToDpi()`` to convert pixel numbers from 96 DPI to system DPI.
Diffstat (limited to 'src/nigui/private/windows')
| -rwxr-xr-x | src/nigui/private/windows/platform_impl.nim | 7 | ||||
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 13 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim index a84ffbd..6a04c46 100755 --- a/src/nigui/private/windows/platform_impl.nim +++ b/src/nigui/private/windows/platform_impl.nim @@ -17,7 +17,6 @@ import tables const pTopLevelWindowClass = "1" const pContainerWindowClass = "2" const pCustomControlWindowClass = "3" - var pDefaultParentWindow: pointer var pKeyState: KeyState var pKeyDownKey: Key @@ -37,7 +36,7 @@ proc pCheckGdiplusStatus(status: int32, showAlert = true) = pRaiseLastOSError(showAlert) else: raiseError("A GDI+ error occured. (Status: " & $status & ")", showAlert) - + proc pColorToRGB32(color: Color): RGB32 = result.red = color.red result.green = color.green @@ -379,6 +378,10 @@ proc init(app: App) = app.defaultBackgroundColor = GetSysColor(COLOR_BTNFACE).pRgb32ToColor() app.defaultFontFamily = "Arial" fScrollbarSize = GetSystemMetrics(SM_CXVSCROLL) + # High DPI support: + discard SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) + fSystemDpi = GetDpiForWindow(pDefaultParentWindow) + fDefaultFontSize = defaultFontSizeForDefaultDpi.scaleToDpi proc runMainLoop() = var msg: Msg diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim index f35e603..e43bc56 100755 --- a/src/nigui/private/windows/windows.nim +++ b/src/nigui/private/windows/windows.nim @@ -24,6 +24,7 @@ {.pragma: libShell32, stdcall, dynlib: "Shell32.dll".} {.pragma: libGdiplus, stdcall, dynlib: "Gdiplus.dll".} {.pragma: libComdlg32, stdcall, dynlib: "Comdlg32.dll".} +{.pragma: libShcore, stdcall, dynlib: "Shcore.dll".} # ---------------------------------------------------------------------------------------- @@ -190,7 +191,9 @@ const PixelFormat32bppARGB* = 2498570 ImageLockModeWrite* = 2 MAPVK_VSC_TO_VK_EX* = 3 - + PROCESS_DPI_UNAWARE* = 0 + PROCESS_SYSTEM_DPI_AWARE* = 1 + PROCESS_PER_MONITOR_DPI_AWARE* = 2 # ---------------------------------------------------------------------------------------- @@ -428,6 +431,7 @@ proc GetClipboardData*(uFormat: int32): pointer {.importc: "GetClipboardData", l proc SetClipboardData*(uFormat: int32, hMem: pointer): pointer {.importc: "SetClipboardData", libUser32.} proc EmptyClipboard*(): bool {.importc: "EmptyClipboard", libUser32.} proc MapVirtualKeyW*(uCode, uMapType: int32): int32 {.importc: "MapVirtualKeyW", libUser32.} +proc GetDpiForWindow*(hWnd: pointer): int32 {.importc: "GetDpiForWindow", libUser32.} when defined(cpu64): # Only available on 64-bit Windows: @@ -523,3 +527,10 @@ proc CommDlgExtendedError*(): int32 {.importc: "CommDlgExtendedError", libComdlg proc GetOpenFileNameW*(lpofn: var OpenFileName): bool {.importc: "GetOpenFileNameW", libComdlg32.} proc GetSaveFileNameW*(lpofn: var OpenFileName): bool {.importc: "GetSaveFileNameW", libComdlg32.} + +# ---------------------------------------------------------------------------------------- +# Comdlg32 Procs +# ---------------------------------------------------------------------------------------- + +proc SetProcessDpiAwareness*(value: int32): int32 {.importc: "SetProcessDpiAwareness", libShcore.} + |
