aboutsummaryrefslogtreecommitdiff
path: root/Captura/Presentation/Windows
diff options
context:
space:
mode:
authorRuben Beltran del Rio <ruben@unlimited.pizza>2023-09-19 22:58:44 +0200
committerRuben Beltran del Rio <ruben@unlimited.pizza>2023-09-19 22:58:44 +0200
commit7ee43fb83799abb89a69cfcd4e2146dd4eaa5045 (patch)
tree560c7fcb1c408eb46c1517b7197e5543d70814a0 /Captura/Presentation/Windows
parentcdc79b7d7c4829ba7a0371826b28f398f267c46a (diff)
Add multimonitor support
Diffstat (limited to 'Captura/Presentation/Windows')
-rw-r--r--Captura/Presentation/Windows/RecordingWindow.swift59
1 files changed, 53 insertions, 6 deletions
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)")
+ }
+ }
+ }
+ }
}