1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //
- // KMNOperationPopToolbarWindow.swift
- // PDF Reader Pro
- //
- // Created by 丁林圭 on 2025/2/6.
- //
- import Cocoa
- class KMNOperationPopToolbarWindow: NSWindow {
-
- static let shared = KMNOperationPopToolbarWindow()
-
- public var annotationPopMode:KMNAnnotationPopMode = KMNAnnotationPopMode(pdfAnnotations: [])
-
- convenience init() {
- let rect = NSRect(x: 0, y: 0, width: 400, height: 44)
- let styleMask: NSWindow.StyleMask = [.fullSizeContentView]
- self.init(contentRect: rect, styleMask: styleMask, backing: .buffered, defer: false)
- }
-
- 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)
-
- let contentViewC = KMNPopOperationViewController.shared
-
- self.contentViewController = contentViewC
-
- self.titlebarAppearsTransparent = true
- self.titleVisibility = .hidden
- self.isMovable = false
-
- self.contentView?.wantsLayer = true
- self.contentView?.layer?.cornerRadius = 4
- self.contentView?.layer?.masksToBounds = true
-
- self.backgroundColor = .clear
- }
-
- func show(relativeTo positioningRect: NSRect, of positioningView: CPDFListView, preferredEdge: NSRectEdge) {
- self.orderFront(nil)
-
- }
-
- //MARK: - Public
- public func updateFrame(listView:CPDFListView?,page:CPDFPage?) {
- let windowFram = listView?.window?.frame ?? CGRectZero
-
- let pageRect = listView?.currentSelectionRect() ?? NSRect.zero
-
- if page != nil {
- let positioningRect = listView?.convert(pageRect, from: page!) ?? NSRect.zero
- if (CGRectIntersectsRect(positioningRect, listView?.frame ?? CGRectZero)) {
- let view: NSView? = nil
- let position = listView?.convert(positioningRect, to: view) ?? NSRect.zero
- var positionNew = position.origin
-
- positionNew.x += windowFram.origin.x + position.width
- positionNew.y += windowFram.origin.y
-
- var positionRect = self.frame
- positionRect.origin.x = positionNew.x - positionRect.width
- positionRect.origin.y = positionNew.y - popOffSet - positionRect.height
-
- var listViewWindRect = listView?.convert(listView?.frame ?? CGRect.zero, to: view) ?? CGRect.zero
- listViewWindRect.origin.x += windowFram.origin.x
- listViewWindRect.origin.y += windowFram.origin.y
-
- if CGRectGetMinY(positionRect) < CGRectGetMinY(listViewWindRect) {
- positionRect.origin.y = positionNew.y + popOffSet + position.height
- }
-
- if CGRectGetMinX(positionRect) < CGRectGetMinX(listViewWindRect) {
- positionRect.origin.x = CGRectGetMinX(listViewWindRect)
- }
-
- if CGRectGetMaxX(positionRect) > CGRectGetMaxX(listViewWindRect) {
- positionRect.origin.x = CGRectGetMaxX(listViewWindRect) - positionRect.width
- }
- self.setFrame(positionRect, display: true)
- let contentViewC = KMNPopOperationViewController.shared
- contentViewC.updateUILanguage()
- }
- }
-
- }
-
- public func closeWindow(listView:CPDFListView?) {
- if self.isVisible == true {
- listView?.window?.removeChildWindow(self)
- self.orderBack(nil)
- }
- }
-
- }
|