From fdb0cfb4df8bab740b0f6250c50eca810be73cc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 17 Jan 2023 21:36:43 +0800 Subject: [PATCH] Display: detect scaled resolution (Windows) --- .../displayserver/displayserver_windows.c | 28 ++++++++++++++++++- src/util/windows/manifest.xml | 2 +- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/detection/displayserver/displayserver_windows.c b/src/detection/displayserver/displayserver_windows.c index eb19469e8..30c1def54 100644 --- a/src/detection/displayserver/displayserver_windows.c +++ b/src/detection/displayserver/displayserver_windows.c @@ -4,6 +4,26 @@ #include #include +typedef struct +{ + WCHAR* deviceName; + uint32_t width; + uint32_t height; +} DataBundle; + +static WINBOOL enumMonitorProc(HMONITOR hMonitor, FF_MAYBE_UNUSED HDC hDC, FF_MAYBE_UNUSED LPRECT rc, LPARAM lparam) +{ + MONITORINFOEXW mi = { .cbSize = sizeof(mi) }; + DataBundle* data = (DataBundle*) lparam; + if(GetMonitorInfoW(hMonitor, (MONITORINFO *)&mi) && wcscmp(mi.szDevice, data->deviceName) == 0) + { + data->width = (uint32_t) mi.rcMonitor.right; + data->height = (uint32_t) mi.rcMonitor.bottom; + return FALSE; + } + return TRUE; +} + void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance) { FF_UNUSED(instance); @@ -34,7 +54,13 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* ins if(EnumDisplaySettingsW(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &devMode) == 0) continue; - ffdsAppendDisplay(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency, 0, 0); + DataBundle data = { + .deviceName = displayDevice.DeviceName, + .width = 0, + .height = 0, + }; + EnumDisplayMonitors(NULL, NULL, enumMonitorProc, (LPARAM)&data); + ffdsAppendDisplay(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency, data.width, data.height); } //https://github.com/hykilpikonna/hyfetch/blob/master/neofetch#L2067 diff --git a/src/util/windows/manifest.xml b/src/util/windows/manifest.xml index 420545ded..86d623144 100644 --- a/src/util/windows/manifest.xml +++ b/src/util/windows/manifest.xml @@ -16,7 +16,7 @@ UTF-8 - true + false SegmentHeap