[client,sdl] fix sdl2 multi monitor settings

This commit is contained in:
akallabeth
2025-01-18 10:09:49 +01:00
parent 1c852e0f6a
commit 0407bebf4b

View File

@@ -196,10 +196,7 @@ static BOOL sdl_apply_display_properties(SdlContext* sdl)
return TRUE;
const UINT32 numIds = freerdp_settings_get_uint32(settings, FreeRDP_NumMonitorIds);
if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, nullptr, numIds))
return FALSE;
if (!freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount, numIds))
return FALSE;
std::vector<rdpMonitor> monitors;
for (UINT32 x = 0; x < numIds; x++)
{
@@ -265,26 +262,25 @@ static BOOL sdl_apply_display_properties(SdlContext* sdl)
const UINT32 rdp_orientation = ORIENTATION_LANDSCAPE;
#endif
auto monitor = static_cast<rdpMonitor*>(
freerdp_settings_get_pointer_array_writable(settings, FreeRDP_MonitorDefArray, x));
WINPR_ASSERT(monitor);
rdpMonitor monitor = {};
/* windows uses 96 dpi as 'default' and the scale factors are in percent. */
const auto factor = ddpi / 96.0f * 100.0f;
monitor->orig_screen = x;
monitor->x = rect.x;
monitor->y = rect.y;
monitor->width = rect.w;
monitor->height = rect.h;
monitor->is_primary = x == 0;
monitor->attributes.desktopScaleFactor = static_cast<UINT32>(factor);
monitor->attributes.deviceScaleFactor = 100;
monitor->attributes.orientation = rdp_orientation;
monitor->attributes.physicalWidth = scale(WINPR_ASSERTING_INT_CAST(uint32_t, rect.w), hdpi);
monitor->attributes.physicalHeight =
scale(WINPR_ASSERTING_INT_CAST(uint32_t, rect.h), vdpi);
monitor.orig_screen = x;
monitor.x = rect.x;
monitor.y = rect.y;
monitor.width = rect.w;
monitor.height = rect.h;
monitor.is_primary = x == 0;
monitor.attributes.desktopScaleFactor = static_cast<UINT32>(factor);
monitor.attributes.deviceScaleFactor = 100;
monitor.attributes.orientation = rdp_orientation;
monitor.attributes.physicalWidth = scale(WINPR_ASSERTING_INT_CAST(uint32_t, rect.w), hdpi);
monitor.attributes.physicalHeight = scale(WINPR_ASSERTING_INT_CAST(uint32_t, rect.h), vdpi);
monitors.push_back(monitor);
}
return TRUE;
return freerdp_settings_set_monitor_def_array_sorted(settings, monitors.data(),
monitors.size());
}
static BOOL sdl_detect_single_window(SdlContext* sdl, UINT32* pMaxWidth, UINT32* pMaxHeight)