From 8c39979848e1251043b65f1ceaf5ea9b4be2ac23 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 18 Jun 2024 19:37:15 +0800 Subject: [PATCH] fix get mac display scale, find screen from display id (#8401) --- src/platform/macos.mm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/platform/macos.mm b/src/platform/macos.mm index bce2a6b5b..0f963b97f 100644 --- a/src/platform/macos.mm +++ b/src/platform/macos.mm @@ -109,17 +109,17 @@ extern "C" bool MacCheckAdminAuthorization() { return Elevate(NULL, NULL); } +// https://gist.github.com/briankc/025415e25900750f402235dbf1b74e42 extern "C" float BackingScaleFactor(uint32_t display) { - NSScreen* s = [NSScreen mainScreen]; - if (s) return [s backingScaleFactor]; - /* on my mini mac, display==2, but only 1 screen - display -= 1; NSArray *screens = [NSScreen screens]; - if (display >= 0 && display < [screens count]) { - NSScreen* s = [screens objectAtIndex:display]; - if (s) return [s backingScaleFactor]; + for (NSScreen *screen in screens) { + NSDictionary *deviceDescription = [screen deviceDescription]; + NSNumber *screenNumber = [deviceDescription objectForKey:@"NSScreenNumber"]; + CGDirectDisplayID screenDisplayID = [screenNumber unsignedIntValue]; + if (screenDisplayID == display) { + return [screen backingScaleFactor]; + } } - */ return 1; }