diff --git a/src/detection/displayserver/displayserver.c b/src/detection/displayserver/displayserver.c index e7ab5c49e..3bc47c345 100644 --- a/src/detection/displayserver/displayserver.c +++ b/src/detection/displayserver/displayserver.c @@ -19,7 +19,7 @@ uint32_t ffdsParseRefreshRate(int32_t refreshRate) return (uint32_t) refreshRate; } -bool ffdsAppendDisplay(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate) +bool ffdsAppendDisplay(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate, uint32_t scaledWidth, uint32_t scaledHeight) { if(width == 0 || height == 0) return false; @@ -28,6 +28,8 @@ bool ffdsAppendDisplay(FFDisplayServerResult* result, uint32_t width, uint32_t h display->width = width; display->height = height; display->refreshRate = refreshRate; + display->scaledWidth = scaledWidth; + display->scaledHeight = scaledHeight; return true; } diff --git a/src/detection/displayserver/displayserver.h b/src/detection/displayserver/displayserver.h index d100520b5..17fef3ba5 100644 --- a/src/detection/displayserver/displayserver.h +++ b/src/detection/displayserver/displayserver.h @@ -10,6 +10,8 @@ typedef struct FFDisplayResult uint32_t width; uint32_t height; uint32_t refreshRate; + uint32_t scaledWidth; + uint32_t scaledHeight; } FFDisplayResult; typedef struct FFDisplayServerResult @@ -27,6 +29,6 @@ const FFDisplayServerResult* ffConnectDisplayServer(const FFinstance* instance); //Used internal uint32_t ffdsParseRefreshRate(int32_t refreshRate); -bool ffdsAppendDisplay(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate); +bool ffdsAppendDisplay(FFDisplayServerResult* result, uint32_t width, uint32_t height, uint32_t refreshRate, uint32_t scaledWidth, uint32_t scaledHeight); #endif diff --git a/src/detection/displayserver/displayserver_apple.c b/src/detection/displayserver/displayserver_apple.c index 782453de9..065e218b7 100644 --- a/src/detection/displayserver/displayserver_apple.c +++ b/src/detection/displayserver/displayserver_apple.c @@ -21,9 +21,11 @@ static void detectDisplays(FFDisplayServerResult* ds) if(mode) { ffdsAppendDisplay(ds, + (uint32_t)CGDisplayModeGetPixelWidth(mode), + (uint32_t)CGDisplayModeGetPixelHeight(mode), + (uint32_t)CGDisplayModeGetRefreshRate(mode), (uint32_t)CGDisplayModeGetWidth(mode), - (uint32_t)CGDisplayModeGetHeight(mode), - (uint32_t)CGDisplayModeGetRefreshRate(mode) + (uint32_t)CGDisplayModeGetHeight(mode) ); CGDisplayModeRelease(mode); } diff --git a/src/detection/displayserver/displayserver_windows.c b/src/detection/displayserver/displayserver_windows.c index 439672571..eb19469e8 100644 --- a/src/detection/displayserver/displayserver_windows.c +++ b/src/detection/displayserver/displayserver_windows.c @@ -34,7 +34,7 @@ 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); + ffdsAppendDisplay(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency, 0, 0); } //https://github.com/hykilpikonna/hyfetch/blob/master/neofetch#L2067 diff --git a/src/detection/displayserver/linux/displayserver_linux.c b/src/detection/displayserver/linux/displayserver_linux.c index 97d7f3c25..257c60cc1 100644 --- a/src/detection/displayserver/linux/displayserver_linux.c +++ b/src/detection/displayserver/linux/displayserver_linux.c @@ -36,6 +36,8 @@ static void parseDRM(FFDisplayServerResult* result) display->width = 0; display->height = 0; display->refreshRate = 0; + display->scaledWidth = 0; + display->scaledHeight = 0; int scanned = fscanf(modeFile, "%ux%u", &display->width, &display->height); if(scanned < 2 || display->width == 0 || display->height == 0) diff --git a/src/detection/displayserver/linux/wayland.c b/src/detection/displayserver/linux/wayland.c index f95c82c6b..27a5c09d3 100644 --- a/src/detection/displayserver/linux/wayland.c +++ b/src/detection/displayserver/linux/wayland.c @@ -66,6 +66,8 @@ static void waylandOutputModeListener(void* data, struct wl_output* output, uint result->width = (uint32_t) width; result->height = (uint32_t) height; result->refreshRate = ffdsParseRefreshRate(refreshRate / 1000); + result->scaledWidth = 0; + result->scaledHeight = 0; } static void waylandGlobalAddListener(void* data, struct wl_registry* registry, uint32_t name, const char* interface, uint32_t version) diff --git a/src/detection/displayserver/linux/xcb.c b/src/detection/displayserver/linux/xcb.c index 44b168a65..99a960894 100644 --- a/src/detection/displayserver/linux/xcb.c +++ b/src/detection/displayserver/linux/xcb.c @@ -119,6 +119,8 @@ void ffdsConnectXcb(const FFinstance* instance, FFDisplayServerResult* result) result, (uint32_t) iterator.data->width_in_pixels, (uint32_t) iterator.data->height_in_pixels, + 0, + 0, 0 ); ffxcb_screen_next(&iterator); @@ -184,7 +186,9 @@ static bool xcbRandrHandleModeInfo(XcbRandrData* data, xcb_randr_mode_info_t* mo data->result, (uint32_t) modeInfo->width, (uint32_t) modeInfo->height, - refreshRate == 0 ? data->defaultRefreshRate : refreshRate + refreshRate == 0 ? data->defaultRefreshRate : refreshRate, + 0, + 0 ); } @@ -219,7 +223,9 @@ static bool xcbRandrHandleCrtc(XcbRandrData* data, xcb_randr_crtc_t crtc) data->result, (uint32_t) crtcInfoReply->width, (uint32_t) crtcInfoReply->height, - data->defaultRefreshRate + data->defaultRefreshRate, + 0, + 0 ); free(crtcInfoReply); @@ -262,7 +268,9 @@ static bool xcbRandrHandleMonitor(XcbRandrData* data, xcb_randr_monitor_info_t* data->result, (uint32_t) monitor->width, (uint32_t) monitor->height, - data->defaultRefreshRate + data->defaultRefreshRate, + 0, + 0 ); } @@ -320,7 +328,9 @@ static void xcbRandrHandleScreen(XcbRandrData* data, xcb_screen_t* screen) data->result, (uint32_t) screen->width_in_pixels, (uint32_t) screen->height_in_pixels, - data->defaultRefreshRate + data->defaultRefreshRate, + 0, + 0 ); } diff --git a/src/detection/displayserver/linux/xlib.c b/src/detection/displayserver/linux/xlib.c index ef6d76b75..12f87587c 100644 --- a/src/detection/displayserver/linux/xlib.c +++ b/src/detection/displayserver/linux/xlib.c @@ -83,6 +83,8 @@ void ffdsConnectXlib(const FFinstance* instance, FFDisplayServerResult* result) result, (uint32_t) screen->width, (uint32_t) screen->height, + 0, + 0, 0 ); } @@ -142,7 +144,9 @@ static bool xrandrHandleModeInfo(XrandrData* data, XRRModeInfo* modeInfo) data->result, (uint32_t) modeInfo->width, (uint32_t) modeInfo->height, - refreshRate == 0 ? data->defaultRefreshRate : refreshRate + refreshRate == 0 ? data->defaultRefreshRate : refreshRate, + 0, + 0 ); } @@ -171,7 +175,9 @@ static bool xrandrHandleCrtc(XrandrData* data, RRCrtc crtc) data->result, (uint32_t) crtcInfo->width, (uint32_t) crtcInfo->height, - data->defaultRefreshRate + data->defaultRefreshRate, + 0, + 0 ); data->ffXRRFreeCrtcInfo(crtcInfo); @@ -205,7 +211,9 @@ static bool xrandrHandleMonitor(XrandrData* data, XRRMonitorInfo* monitorInfo) data->result, (uint32_t) monitorInfo->width, (uint32_t) monitorInfo->height, - data->defaultRefreshRate + data->defaultRefreshRate, + 0, + 0 ); } @@ -257,7 +265,9 @@ static void xrandrHandleScreen(XrandrData* data, Screen* screen) data->result, (uint32_t) WidthOfScreen(screen), (uint32_t) HeightOfScreen(screen), - data->defaultRefreshRate + data->defaultRefreshRate, + 0, + 0 ); } diff --git a/src/modules/display.c b/src/modules/display.c index beed373ba..89496816b 100644 --- a/src/modules/display.c +++ b/src/modules/display.c @@ -27,6 +27,11 @@ void ffPrintDisplay(FFinstance* instance) if(result->refreshRate > 0) printf(" @ %iHz", result->refreshRate); + if( + result->scaledWidth > 0 && result->scaledWidth != result->width && + result->scaledHeight > 0 && result->scaledHeight != result->height) + printf(" (as %ix%i)", result->scaledWidth, result->scaledHeight); + putchar('\n'); } else