// // KMSnapshotWindow.swift // PDF Reader Pro // // Created by tangchao on 2023/12/13. // import Cocoa class KMSnapshotWindow: NSWindow { var disableConstrainToScreen = false private let MIN_WINDOW_COORDINATE: CGFloat = -16000 var windowImage: NSImage? { get { let frame = self.frame let visible = self.isVisible if visible == false { self.disableConstrainToScreen = true self.setFrameOrigin(NSMakePoint(MIN_WINDOW_COORDINATE, MIN_WINDOW_COORDINATE)) self.orderBack(nil) self.displayIfNeeded() self.disableConstrainToScreen = false } let cgImage = CGWindowListCreateImage(CGRect.null, .optionIncludingWindow, CGWindowID(self.windowNumber), .boundsIgnoreFraming) if visible == false { self.orderOut(nil) self.setFrameOrigin(frame.origin) } if let data = cgImage { let image = NSImage(cgImage: data, size: frame.size) return image } return nil } } override init(contentRect: NSRect, styleMask style: NSWindow.StyleMask, backing backingStoreType: NSWindow.BackingStoreType, defer flag: Bool) { super.init(contentRect: contentRect, styleMask: style, backing: backingStoreType, defer: flag) self.standardWindowButton(.miniaturizeButton)?.isEnabled = true } override func miniaturize(_ sender: Any?) { (self.windowController as? KMSnapshotWindowController)?.miniaturize() } override func constrainFrameRect(_ frameRect: NSRect, to screen: NSScreen?) -> NSRect { if self.disableConstrainToScreen { return frameRect } return super.constrainFrameRect(frameRect, to: screen) } // - (id)_updateButtonsForModeChanged { // id rv = [super _updateButtonsForModeChanged]; // [[self standardWindowButton:NSWindowMiniaturizeButton] setEnabled:YES]; // return rv; // } }