X-Git-Url: https://git.r.bdr.sh/rbdr/captura/blobdiff_plain/8e9321304ca80e9ada7ac01058a5f4603cb37fab..7ee43fb83799abb89a69cfcd4e2146dd4eaa5045:/Captura/Presentation/Windows/RecordingWindow.swift?ds=inline diff --git a/Captura/Presentation/Windows/RecordingWindow.swift b/Captura/Presentation/Windows/RecordingWindow.swift index f5941dc..370a47a 100644 --- a/Captura/Presentation/Windows/RecordingWindow.swift +++ b/Captura/Presentation/Windows/RecordingWindow.swift @@ -13,11 +13,7 @@ class RecordingWindow: NSWindow { init(_ configuration: CaptureSessionConfiguration, _ button: NSRect?) { - let screens = NSScreen.screens - var boundingBox = NSZeroRect - for screen in screens { - boundingBox = NSUnionRect(boundingBox, screen.frame) - } + let boundingBox = NSScreen.screenWithMouse?.frame ?? NSZeroRect super.init( contentRect: boundingBox, @@ -25,6 +21,7 @@ class RecordingWindow: NSWindow { backing: .buffered, defer: false) + self.isReleasedWhenClosed = false self.collectionBehavior = [.canJoinAllSpaces] self.isMovableByWindowBackground = false @@ -37,10 +34,16 @@ class RecordingWindow: NSWindow { recordingView.frame = boundingBox recordingView.button = button self.contentView = recordingView - self.backgroundColor = NSColor(white: 1.0, alpha: 0.001) + //self.backgroundColor = NSColor(white: 1.0, alpha: 0.001) + self.backgroundColor = NSColor(red: 1.0, green: 0.0, blue: 1.0, alpha: 0.5) self.level = .screenSaver self.isOpaque = false self.hasShadow = false + + print("AAAAH INIT CHANGE") + print("AAAAH FRAME X: \(recordingView.frame.minX) \(recordingView.frame.maxX) // Y: \(recordingView.frame.minY) \(recordingView.frame.maxY)") + print("AAAAH BOUNDS X: \(recordingView.bounds.minX) \(recordingView.bounds.maxX) // Y: \(recordingView.bounds.minY) \(recordingView.bounds.maxY)") + print("AAAAH WIN F X: \(self.frame.minX) \(self.frame.maxX) // Y: \(self.frame.minY) \(self.frame.maxY)") } // MARK: - Window Behavior Overrides @@ -167,6 +170,12 @@ class RecordingContentView: NSView { self.addTrackingArea(trackingArea) } + override func mouseExited(with event: NSEvent) { + if state == .idle && box == nil { + self.moveWindow() + } + } + override func mouseMoved(with event: NSEvent) { self.mouseLocation = self.convert(event.locationInWindow, from: nil) @@ -305,6 +314,17 @@ class RecordingContentView: NSView { let dashLength: CGFloat = 5.0 let lineWidth = 0.5 + + if let button { + let buttonPath = NSBezierPath() + buttonPath.move(to: NSPoint(x: button.minX, y: button.minY)) + buttonPath.line(to: NSPoint(x: button.maxX, y: button.minY)) + buttonPath.line(to: NSPoint(x: button.maxX, y: button.maxY)) + buttonPath.line(to: NSPoint(x: button.minX, y: button.maxY)) + buttonPath.line(to: NSPoint(x: button.minX, y: button.minY)) + NSColor(red: 1, green: 0, blue: 1, alpha: 1).setFill() + buttonPath.fill() + } if state == .idle && box == nil { let blackLine = NSBezierPath() @@ -424,4 +444,31 @@ class RecordingContentView: NSView { text.draw(in: textRect, withAttributes: textAttributes) } + + private func moveWindow() { + print("AAAAH BEFORE WE CHANGE") + print("AAAAH FRAME X: \(self.frame.minX) \(self.frame.maxX) // Y: \(self.frame.minY) \(self.frame.maxY)") + print("AAAAH BOUNDS X: \(self.bounds.minX) \(self.bounds.maxX) // Y: \(self.bounds.minY) \(self.bounds.maxY)") + print("AAAAH WIN F X: \(self.window?.frame.minX) \(self.window?.frame.maxX) // Y: \(self.window?.frame.minY) \(self.window?.frame.maxY)") + let screen = NSScreen.screenWithMouse + if let currentScreen = self.window?.screen { + if currentScreen != screen { + let frame = screen?.frame ?? NSZeroRect + self.frame = frame + self.bounds = frame + self.updateTrackingAreas() + + if let window = self.window { + self.bounds = frame + window.setFrame(frame, display: true, animate: false) + window.makeKeyAndOrderFront(nil) + window.orderFrontRegardless() + print("AAAAH AFTER CHANGE") + print("AAAAH FRAME X: \(self.frame.minX) \(self.frame.maxX) // Y: \(self.frame.minY) \(self.frame.maxY)") + print("AAAAH BOUNDS X: \(self.bounds.minX) \(self.bounds.maxX) // Y: \(self.bounds.minY) \(self.bounds.maxY)") + print("AAAAH WIN F X: \(self.window?.frame.minX) \(self.window?.frame.maxX) // Y: \(self.window?.frame.minY) \(self.window?.frame.maxY)") + } + } + } + } }