From 60ea8d2c2b6d30c70e5252646b499b984e853dc5 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 16 Jun 2024 12:01:41 +0800 Subject: [PATCH] mac scale factor of each screen (#8368) Signed-off-by: 21pages --- libs/scrap/src/quartz/display.rs | 2 +- libs/scrap/src/quartz/ffi.rs | 2 +- src/platform/macos.mm | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libs/scrap/src/quartz/display.rs b/libs/scrap/src/quartz/display.rs index b7d454880..137d648cf 100644 --- a/libs/scrap/src/quartz/display.rs +++ b/libs/scrap/src/quartz/display.rs @@ -71,7 +71,7 @@ impl Display { } pub fn scale(self) -> f64 { - let s = unsafe { BackingScaleFactor() as _ }; + let s = unsafe { BackingScaleFactor(self.0) as _ }; if s > 1. { let enable_retina = super::ENABLE_RETINA.lock().unwrap().clone(); if enable_retina { diff --git a/libs/scrap/src/quartz/ffi.rs b/libs/scrap/src/quartz/ffi.rs index 7cc57e29e..c55bc8c69 100644 --- a/libs/scrap/src/quartz/ffi.rs +++ b/libs/scrap/src/quartz/ffi.rs @@ -193,7 +193,7 @@ extern "C" { pub fn CGDisplayIsOnline(display: u32) -> i32; pub fn CGDisplayBounds(display: u32) -> CGRect; - pub fn BackingScaleFactor() -> f32; + pub fn BackingScaleFactor(display: u32) -> f32; // IOSurface diff --git a/src/platform/macos.mm b/src/platform/macos.mm index d487098b6..cf35b5e1a 100644 --- a/src/platform/macos.mm +++ b/src/platform/macos.mm @@ -109,9 +109,13 @@ extern "C" bool MacCheckAdminAuthorization() { return Elevate(NULL, NULL); } -extern "C" float BackingScaleFactor() { - NSScreen* s = [NSScreen mainScreen]; - if (s) return [s backingScaleFactor]; +extern "C" float BackingScaleFactor(uint32_t display) { + display -= 1; + NSArray *screens = [NSScreen screens]; + if (display >= 0 && display < [screens count]) { + NSScreen* s = [screens objectAtIndex:display]; + if (s) return [s backingScaleFactor]; + } return 1; }