From 5bc9a5dc4e3543634c5473c8f1c45a878fbaed80 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Tue, 16 Jul 2024 16:36:19 +0800 Subject: [PATCH] Display: rotate physical demensions --- .../displayserver/displayserver_windows.c | 3 ++ .../linux/wayland/global-output.c | 33 +-------------- .../displayserver/linux/wayland/kde-output.c | 33 +-------------- .../displayserver/linux/wayland/wayland.c | 41 +++++++++++++++++++ .../displayserver/linux/wayland/wayland.h | 2 + .../displayserver/linux/wayland/zwlr-output.c | 33 +-------------- 6 files changed, 49 insertions(+), 96 deletions(-) diff --git a/src/detection/displayserver/displayserver_windows.c b/src/detection/displayserver/displayserver_windows.c index a7774b162..3ccb212fd 100644 --- a/src/detection/displayserver/displayserver_windows.c +++ b/src/detection/displayserver/displayserver_windows.c @@ -132,6 +132,9 @@ static void detectDisplays(FFDisplayServerResult* ds) uint32_t temp = width; width = height; height = temp; + temp = physicalWidth; + physicalWidth = physicalHeight; + physicalHeight = temp; } uint32_t rotation; diff --git a/src/detection/displayserver/linux/wayland/global-output.c b/src/detection/displayserver/linux/wayland/global-output.c index e318fc0db..7f815f42f 100644 --- a/src/detection/displayserver/linux/wayland/global-output.c +++ b/src/detection/displayserver/linux/wayland/global-output.c @@ -110,38 +110,7 @@ void ffWaylandHandleGlobalOutput(WaylandData* wldata, struct wl_registry* regist if(display.width <= 0 || display.height <= 0) return; - uint32_t rotation; - switch(display.transform) - { - case WL_OUTPUT_TRANSFORM_FLIPPED_90: - case WL_OUTPUT_TRANSFORM_90: - rotation = 90; - break; - case WL_OUTPUT_TRANSFORM_FLIPPED_180: - case WL_OUTPUT_TRANSFORM_180: - rotation = 180; - break; - case WL_OUTPUT_TRANSFORM_FLIPPED_270: - case WL_OUTPUT_TRANSFORM_270: - rotation = 270; - break; - default: - rotation = 0; - break; - } - - switch(rotation) - { - case 90: - case 270: { - int32_t temp = display.width; - display.width = display.height; - display.height = temp; - break; - } - default: - break; - } + uint32_t rotation = ffWaylandHandleRotation(&display); ffdsAppendDisplay(wldata->result, (uint32_t) display.width, diff --git a/src/detection/displayserver/linux/wayland/kde-output.c b/src/detection/displayserver/linux/wayland/kde-output.c index 558bcc433..c6f08f243 100644 --- a/src/detection/displayserver/linux/wayland/kde-output.c +++ b/src/detection/displayserver/linux/wayland/kde-output.c @@ -169,38 +169,7 @@ void ffWaylandHandleKdeOutput(WaylandData* wldata, struct wl_registry* registry, if(display.width <= 0 || display.height <= 0 || !display.internal) return; - uint32_t rotation; - switch(display.transform) - { - case WL_OUTPUT_TRANSFORM_FLIPPED_90: - case WL_OUTPUT_TRANSFORM_90: - rotation = 90; - break; - case WL_OUTPUT_TRANSFORM_FLIPPED_180: - case WL_OUTPUT_TRANSFORM_180: - rotation = 180; - break; - case WL_OUTPUT_TRANSFORM_FLIPPED_270: - case WL_OUTPUT_TRANSFORM_270: - rotation = 270; - break; - default: - rotation = 0; - break; - } - - switch(rotation) - { - case 90: - case 270: { - int32_t temp = display.width; - display.width = display.height; - display.height = temp; - break; - } - default: - break; - } + uint32_t rotation = ffWaylandHandleRotation(&display); ffdsAppendDisplay(wldata->result, (uint32_t) display.width, diff --git a/src/detection/displayserver/linux/wayland/wayland.c b/src/detection/displayserver/linux/wayland/wayland.c index cbb3703e1..2bf03ebe7 100644 --- a/src/detection/displayserver/linux/wayland/wayland.c +++ b/src/detection/displayserver/linux/wayland/wayland.c @@ -217,6 +217,47 @@ void ffWaylandOutputDescriptionListener(void* data, FF_MAYBE_UNUSED void* output if (!ffStrEquals(description, "Unknown Display") && !ffStrContains(description, "(null)")) ffStrbufAppendS(&display->description, description); } + +uint32_t ffWaylandHandleRotation(WaylandDisplay* display) +{ + uint32_t rotation; + switch(display->transform) + { + case WL_OUTPUT_TRANSFORM_FLIPPED_90: + case WL_OUTPUT_TRANSFORM_90: + rotation = 90; + break; + case WL_OUTPUT_TRANSFORM_FLIPPED_180: + case WL_OUTPUT_TRANSFORM_180: + rotation = 180; + break; + case WL_OUTPUT_TRANSFORM_FLIPPED_270: + case WL_OUTPUT_TRANSFORM_270: + rotation = 270; + break; + default: + rotation = 0; + break; + } + + switch(rotation) + { + case 90: + case 270: { + int32_t temp = display->width; + display->width = display->height; + display->height = temp; + + temp = display->physicalWidth; + display->physicalWidth = display->physicalHeight; + display->physicalHeight = temp; + break; + } + default: + break; + } + return rotation; +} #endif void ffdsConnectWayland(FFDisplayServerResult* result) diff --git a/src/detection/displayserver/linux/wayland/wayland.h b/src/detection/displayserver/linux/wayland/wayland.h index 025b0b299..e78a3c6de 100644 --- a/src/detection/displayserver/linux/wayland/wayland.h +++ b/src/detection/displayserver/linux/wayland/wayland.h @@ -67,6 +67,8 @@ inline static uint64_t ffWaylandGenerateIdFromName(const char* name) void ffWaylandOutputNameListener(void* data, FF_MAYBE_UNUSED void* output, const char *name); void ffWaylandOutputDescriptionListener(void* data, FF_MAYBE_UNUSED void* output, const char* description); +// Modifies content of display. Don't call this function when calling ffdsAppendDisplay +uint32_t ffWaylandHandleRotation(WaylandDisplay* display); void ffWaylandHandleGlobalOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version); void ffWaylandHandleZwlrOutput(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version); diff --git a/src/detection/displayserver/linux/wayland/zwlr-output.c b/src/detection/displayserver/linux/wayland/zwlr-output.c index dd9b83289..76aee392a 100644 --- a/src/detection/displayserver/linux/wayland/zwlr-output.c +++ b/src/detection/displayserver/linux/wayland/zwlr-output.c @@ -120,38 +120,7 @@ static void waylandHandleZwlrHead(void *data, FF_MAYBE_UNUSED struct zwlr_output if(display.width <= 0 || display.height <= 0) return; - uint32_t rotation; - switch(display.transform) - { - case WL_OUTPUT_TRANSFORM_FLIPPED_90: - case WL_OUTPUT_TRANSFORM_90: - rotation = 90; - break; - case WL_OUTPUT_TRANSFORM_FLIPPED_180: - case WL_OUTPUT_TRANSFORM_180: - rotation = 180; - break; - case WL_OUTPUT_TRANSFORM_FLIPPED_270: - case WL_OUTPUT_TRANSFORM_270: - rotation = 270; - break; - default: - rotation = 0; - break; - } - - switch(rotation) - { - case 90: - case 270: { - int32_t temp = display.width; - display.width = display.height; - display.height = temp; - break; - } - default: - break; - } + uint32_t rotation = ffWaylandHandleRotation(&display); ffdsAppendDisplay(wldata->result, (uint32_t) display.width,