KMNContentEditPopToolbarWindow.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //
  2. // KMNContentEditPopToolbarWindow.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by 丁林圭 on 2025/2/6.
  6. //
  7. import Cocoa
  8. class KMNContentEditPopToolbarWindow: NSWindow {
  9. static let shared = KMNContentEditPopToolbarWindow()
  10. public var editContentPopMode:KMNEditContentPopMode = KMNEditContentPopMode(currentEditAreas: [])
  11. convenience init() {
  12. let rect = NSRect(x: 0, y: 0, width: 400, height: 44)
  13. let styleMask: NSWindow.StyleMask = [.fullSizeContentView]
  14. self.init(contentRect: rect, styleMask: styleMask, backing: .buffered, defer: false)
  15. }
  16. override init(contentRect: NSRect, styleMask style: NSWindow.StyleMask, backing backingStoreType: NSWindow.BackingStoreType, defer flag: Bool) {
  17. super.init(contentRect: contentRect, styleMask: style, backing: backingStoreType, defer: flag)
  18. let contentViewC = KMNPopContentEditViewController.shared
  19. self.contentViewController = contentViewC
  20. self.titlebarAppearsTransparent = true
  21. self.titleVisibility = .hidden
  22. self.isMovable = false
  23. self.contentView?.wantsLayer = true
  24. self.contentView?.layer?.cornerRadius = 4
  25. self.contentView?.layer?.masksToBounds = true
  26. self.backgroundColor = .clear
  27. }
  28. func show(relativeTo positioningRect: NSRect, of positioningView: CPDFListView, preferredEdge: NSRectEdge) {
  29. self.orderFront(nil)
  30. let contentViewC = KMNPopContentEditViewController.shared
  31. }
  32. //MARK: - Public
  33. public func updateFrame(listView:CPDFListView) {
  34. let editingAreas = listView.km_EditingAreas()
  35. let page = editingAreas.first?.page
  36. let windowFram = listView.window?.frame ?? CGRectZero
  37. if(page != nil) {
  38. let pageRect = listView.selectionMultipleBounds(withEditArea: editingAreas)
  39. let positioningRect = listView.convert(pageRect, from: page!)
  40. let view: NSView? = nil
  41. let position = listView.convert(positioningRect, to: view)
  42. var positionNew = position.origin
  43. positionNew.x += windowFram.origin.x + position.width/2
  44. positionNew.y += windowFram.origin.y + position.height
  45. var positionRect = self.frame
  46. positionRect.origin.x = positionNew.x - positionRect.width/2
  47. positionRect.origin.y = positionNew.y + popOffSet + CGFloat(truncating: listView.editingConfig().editAreaMargin)
  48. var listViewWindRect = listView.convert(listView.frame, to: view)
  49. listViewWindRect.origin.x += windowFram.origin.x
  50. listViewWindRect.origin.y += windowFram.origin.y
  51. if CGRectGetMaxY(positionRect) > CGRectGetMaxY(listViewWindRect) {
  52. positionRect.origin.y = positionNew.y - popOffSet - position.height - positionRect.size.height
  53. }
  54. if CGRectGetMinX(positionRect) < CGRectGetMinX(listViewWindRect) {
  55. positionRect.origin.x = CGRectGetMinX(listViewWindRect)
  56. }
  57. if CGRectGetMaxX(positionRect) > CGRectGetMaxX(listViewWindRect) {
  58. positionRect.origin.x = CGRectGetMaxX(listViewWindRect) - positionRect.width
  59. }
  60. self.setFrame(positionRect, display: true)
  61. let popA = KMNPopAnnotationViewController.shared
  62. popA.updateUILanguage()
  63. }
  64. }
  65. public func closeWindow(listView:CPDFListView?) {
  66. if self.isVisible == true {
  67. listView?.window?.removeChildWindow(self)
  68. self.orderBack(nil)
  69. }
  70. let contentViewC = KMNPopContentEditViewController.shared
  71. contentViewC.closePopView()
  72. }
  73. }