How to arrange the coordinates of multiple screens correctly in macOS? I tried to arrange according to the frame output by NSScreen.screens, but the coordinate position is always incorrect. Does anyone know? Or is there a reference for related open source code? Thanks!
This is the relevant code:
struct ScreenInfo {
let frame: CGRect
let localizedName: String
let displayID: CGDirectDisplayID
}
extension ScreenInfo {
static func allScreens() -> [ScreenInfo] {
var offsetX: CGFloat = 0.0
var offsetY: CGFloat = 0.0
for screen in NSScreen.screens {
let quartzFrame = CGDisplayBounds(screen.displayID)
if -quartzFrame.origin.x > offsetX {
offsetX = 0 - quartzFrame.origin.x
}
if -quartzFrame.origin.y > offsetY {
offsetY = 0 - quartzFrame.origin.y
}
}
let margin: CGFloat = 25.0
let scale: CGFloat = 0.1
var allScreens = [ScreenInfo]()
for screen in NSScreen.screens {
let width = screen.frame.width * scale
let height = screen.frame.height * scale
let quartzFrame = CGDisplayBounds(screen.displayID)
let x = (quartzFrame.origin.x + offsetX) * scale + margin
let y = (quartzFrame.origin.y + offsetY) * scale + margin
let frame = CGRect(x: x, y: y, width: width, height: height)
let info = ScreenInfo(frame: frame, localizedName: screen.localizedName, displayID: screen.displayID)
allScreens.append(info)
print(screen.localizedName,screen.frame,offsetX,offsetY)
}
return allScreens
}
}
extension NSScreen {
var displayID: CGDirectDisplayID {
let key = NSDeviceDescriptionKey(rawValue: "NSScreenNumber")
return deviceDescription[key] as! CGDirectDisplayID
}
}
