uuid = "64A0C242-D356-455C-8377-13FD423E21EF"
type = "1"
version = "2.0">
+ <Breakpoints>
+ <BreakpointProxy
+ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+ <BreakpointContent
+ uuid = "BE57803D-825F-4BD3-A90A-66E06C9465B9"
+ shouldBeEnabled = "No"
+ ignoreCount = "0"
+ continueAfterRunningActions = "No"
+ filePath = "Captura/CapturaApp.swift"
+ startingColumnNumber = "9223372036854775807"
+ endingColumnNumber = "9223372036854775807"
+ startingLineNumber = "345"
+ endingLineNumber = "345"
+ landmarkName = "failed(_:)"
+ landmarkType = "7">
+ </BreakpointContent>
+ </BreakpointProxy>
+ <BreakpointProxy
+ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+ <BreakpointContent
+ uuid = "2F7C03C5-9042-41A2-B409-8E15E063FA4C"
+ shouldBeEnabled = "No"
+ ignoreCount = "0"
+ continueAfterRunningActions = "No"
+ filePath = "Captura/CapturaApp.swift"
+ startingColumnNumber = "9223372036854775807"
+ endingColumnNumber = "9223372036854775807"
+ startingLineNumber = "290"
+ endingLineNumber = "290"
+ landmarkName = "startRecording()"
+ landmarkType = "7">
+ </BreakpointContent>
+ </BreakpointProxy>
+ <BreakpointProxy
+ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+ <BreakpointContent
+ uuid = "A8CCA767-DD2D-482B-8F95-026C4A0BD9FA"
+ shouldBeEnabled = "No"
+ ignoreCount = "0"
+ continueAfterRunningActions = "No"
+ filePath = "Captura/Domain/CapturaCaptureSession.swift"
+ startingColumnNumber = "9223372036854775807"
+ endingColumnNumber = "9223372036854775807"
+ startingLineNumber = "42"
+ endingLineNumber = "42"
+ landmarkName = "startRecording()"
+ landmarkType = "7">
+ </BreakpointContent>
+ </BreakpointProxy>
+ <BreakpointProxy
+ BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+ <BreakpointContent
+ uuid = "DE0C260E-5AA4-404B-B50E-83DAF27C9532"
+ shouldBeEnabled = "No"
+ ignoreCount = "0"
+ continueAfterRunningActions = "No"
+ filePath = "Captura/Domain/CapturaCaptureSession.swift"
+ startingColumnNumber = "9223372036854775807"
+ endingColumnNumber = "9223372036854775807"
+ startingLineNumber = "37"
+ endingLineNumber = "37"
+ landmarkName = "startRecording()"
+ landmarkType = "7">
+ </BreakpointContent>
+ </BreakpointProxy>
+ </Breakpoints>
</Bucket>
let recordingView = RecordingContentView(configuration, frame: boundingBox, button: button ?? NSZeroRect)
recordingView.frame = boundingBox
self.contentView = recordingView
- //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.backgroundColor = NSColor(white: 1.0, alpha: 0.001)
+ // uncomment below to debug window placement visually
+ // 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
class RecordingContentView: NSView {
init(_ configuration: CaptureSessionConfiguration, frame: NSRect, button: NSRect) {
+ self.buttonSize = button.size
+ var buttonOffset = NSPoint()
+ for screen in NSScreen.screens {
+ if screen.frame.intersects(button) {
+ let relativeY = screen.frame.height - (button.minY - screen.frame.minY)
+ let relativeX = screen.frame.width - (button.minX - screen.frame.minX)
+ buttonOffset = NSPoint(x: relativeX, y: relativeY)
+ }
+ }
+ self.buttonOffset = buttonOffset
super.init(frame: frame)
preventResize = configuration.preventResize
preventMove = configuration.preventMove
autoStart = configuration.autoStart
- self.button = button
- for screen in NSScreen.screens {
- print(screen.frame)
- // BEFORE YOU WENT TO BED:
- // You were checking which screen contains the button, so you can calculate the offset which should give you
- // the location of the button, which you can then use to draw the button at the same offset whenever you need
- // to change screen! This would keep the behavior of pressing the record button.
- // If this does work, remember to then test it with a Hi DPI display, because we might need to adjust for pixel
- // density.
- // Finally, if it does work, make sure the alternate monitor still responds, by adjusting the behavior of the
- // real button
- if screen.frame.intersects(button) {
- print("CONTAINS! ->")
- let relativeX = screen.frame.width - button.maxX
- let relativeY = screen.frame.height - button.maxY
- print("The rect is at (\(relativeX), \(relativeY)) relative to the top right of the screen frame.")
- } else {
- print("NO CONTAINS ->")
- }
- print(button)
- }
+ self.bounds = frame
+ self.button = NSRect(x: frame.maxX - buttonOffset.x, y: frame.maxY - buttonOffset.y, width: buttonSize.width, height: buttonSize.height)
if configuration.x != nil || configuration.y != nil || configuration.width != nil || configuration.height != nil {
box = NSRect(
fatalError("init(coder:) has not been implemented")
}
- private var buttons: [NSRect] = []
+ private let buttonSize: NSSize
+ private let buttonOffset: NSPoint
public var button: NSRect? = nil
@Published public var box: NSRect? = nil
public var state: RecordingWindowState = .idle
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()
- }
+
+// Uncomment below to debug button placement visually
+// 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()
}
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 {
if let window = self.window {
self.bounds = frame
+ self.button = NSRect(x: frame.maxX - buttonOffset.x, y: frame.maxY - buttonOffset.y, width: buttonSize.width, height: buttonSize.height)
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)")
}
}
}