@@ -86,18 +86,18 @@ final class OverlayPanel: NSPanel {
8686 }
8787
8888 func setTopLeftCoordinateFrame( _ frame: CGRect , display: Bool ) {
89- let screen = NSScreen . screens
90- . first ( where : { $0 . frame . intersects ( frame ) } ) ?? NSScreen . main
89+ let zeroScreen = NSScreen . screens. first { $0 . frame == . zero }
90+ ?? NSScreen . primaryScreen ?? NSScreen . main
9191 let panelFrame = Self . convertAXRectToNSPanelFrame (
9292 axRect: frame,
93- forScreen : screen
93+ forPrimaryScreen : zeroScreen
9494 )
9595 panelState. windowFrame = frame
9696 panelState. windowFrameNSCoordinate = panelFrame
9797 setFrame ( panelFrame, display: display)
9898 }
9999
100- static func convertAXRectToNSPanelFrame( axRect: CGRect , forScreen screen: NSScreen ? ) -> CGRect {
100+ static func convertAXRectToNSPanelFrame( axRect: CGRect , forPrimaryScreen screen: NSScreen ? ) -> CGRect {
101101 guard let screen = screen else { return . zero }
102102 let screenFrame = screen. frame
103103 let flippedY = screenFrame. origin. y + screenFrame. size
@@ -139,3 +139,35 @@ func overlayLevel(_ addition: Int) -> NSWindow.Level {
139139 return . init( minimumWidgetLevel + addition)
140140}
141141
142+ public extension CGRect {
143+ func flipped( relativeTo reference: CGRect ) -> CGRect {
144+ let flippedOrigin = CGPoint (
145+ x: origin. x,
146+ y: reference. height - origin. y - height
147+ )
148+ return CGRect ( origin: flippedOrigin, size: size)
149+ }
150+
151+ func relative( to reference: CGRect ) -> CGRect {
152+ let relativeOrigin = CGPoint (
153+ x: origin. x - reference. origin. x,
154+ y: origin. y - reference. origin. y
155+ )
156+ return CGRect ( origin: relativeOrigin, size: size)
157+ }
158+ }
159+
160+ public extension NSScreen {
161+ var isPrimary : Bool {
162+ let id = deviceDescription [ . init( " NSScreenNumber " ) ] as? CGDirectDisplayID
163+ return id == CGMainDisplayID ( )
164+ }
165+
166+ static var primaryScreen : NSScreen ? {
167+ NSScreen . screens. first {
168+ let id = $0. deviceDescription [ . init( " NSScreenNumber " ) ] as? CGDirectDisplayID
169+ return id == CGMainDisplayID ( )
170+ }
171+ }
172+ }
173+
0 commit comments