浏览代码

【系统菜单栏】窗口菜单,适合PDF菜单补充

tangchao 1 年之前
父节点
当前提交
0c0b591c61

+ 13 - 3
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift

@@ -806,9 +806,7 @@ extension KMBrowserWindowController {
     @IBAction func toggleRightSidePane(_ sender: Any?) {
         KMPrint("toggleRightSidePane ...")
     }
-    @IBAction func performFit(_ sender: Any?) {
-        KMPrint("performFit ...")
-    }
+
     @IBAction func changeRightSidePaneState(_ sender: Any?) {
         KMPrint("changeRightSidePaneState ...")
     }
@@ -2967,6 +2965,18 @@ extension KMBrowserWindowController: KMSystemWindowMenuRrotocol {
             }
         }
     }
+    
+    @IBAction func performFit(_ sender: Any?) {
+        if (self.canResponseDocumentAction() == false) {
+            return
+        }
+        if let document = self.browser.activeTabContents() as? KMMainDocument {
+            if (document.isHome) {
+            } else {
+                document.mainViewController?.performFit(sender)
+            }
+        }
+    }
 }
 
 // MARK: - Analytics (埋点)

+ 0 - 1
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListView.m

@@ -24,7 +24,6 @@
 #import "NSImage+PDFListView.h"
 #import "NSCursor+PDFListView.h"
 
-#import "CPDFListView+Extension.h"
 #import <PDF_Reader_Pro-Swift.h>
 
 NSNotificationName const CPDFListViewSelectionChangedNotification = @"CPDFListViewSelectionChangedNotification";

+ 5 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Extension.h

@@ -51,6 +51,11 @@
 
 @property (nonatomic, readonly) SKTransitionController *transitionController;
 
+- (CPDFDisplayViewMode)displayViewMode;
+//- (void)setDisplayViewMode:(CPDFDisplayViewMode)displayViewMode;
+
+- (CPDFDisplayViewMode)fetchDisplayViewMode;
+
 @end
 
 @interface CPDFView (KMExtension)

+ 13 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Extension.m

@@ -14,6 +14,7 @@
 #import "CPDFListView+Private.h"
 #import "NSGeometry+PDFListView.h"
 #import <objc/runtime.h>
+#import <ComPDFKit/CPDFView+Utilities.h>
 #import <PDF_Reader_Pro-Swift.h>
 
 CGFloat DEFAULT_SNAPSHOT_HEIGHT = 200.0;
@@ -814,6 +815,18 @@ CGFloat DEFAULT_SNAPSHOT_HEIGHT = 200.0;
 #endif
 }
 
+- (CPDFDisplayViewMode)displayViewMode {
+    return [super displayViewMode];
+}
+
+//- (void)setDisplayViewMode:(CPDFDisplayViewMode)displayViewMode {
+//    [super setDisplayViewMode:displayViewMode];
+//}
+
+- (CPDFDisplayViewMode)fetchDisplayViewMode {
+    return [self displayViewMode];
+}
+
 @end
 
 @implementation CPDFView (KMExtension)

+ 71 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift

@@ -1253,6 +1253,77 @@ extension KMMainViewController {
     @IBAction func menuItemAction_currentWindowName(_ sender: Any) {
         
     }
+    
+    @IBAction func performFit(_ sender: Any?) {
+        if self.interactionMode != .normal {
+            NSSound.beep()
+            return
+        }
+        
+        let displayMode = self.listView.fetchDisplayViewMode()
+        let scaleFactor = self.listView.scaleFactor
+        let autoScales = self.listView.autoScales
+        var isSingleRow = false
+        if displayMode == .singlePage || displayMode == .twoUp {
+            isSingleRow = true
+        } else if displayMode == .singlePageContinuous || self.listView.displaysAsBook {
+            isSingleRow = (self.listView?.document?.pageCount ?? 0) <= 1
+        } else {
+            isSingleRow = (self.listView?.document?.pageCount ?? 0) <= 2
+        }
+            
+        var frame = self.view.window?.frame ?? .zero
+        var size: NSSize = .zero
+        let oldSize = self.listView.frame.size
+        let documentView = self.listView.documentView()
+        let documentRect = documentView?.convert(documentView?.bounds ?? .zero, to: nil) ?? .zero
+        let page = self.listView.currentPage()
+        let box = self.listView.displayBox
+        let PAGE_BREAK_MARGIN: CGFloat = 8.0
+        let margin = self.listView.displaysPageBreaks ? PAGE_BREAK_MARGIN : 0.0
+        
+        // Calculate the new size for the pdfView
+        size.width = NSWidth(documentRect)
+        if (autoScales) {
+            size.width /= scaleFactor
+        }
+        if (isSingleRow) {
+            size.height = NSHeight(documentRect)
+        } else {
+            let rect = self.listView.convert(page?.bounds(for: box) ?? .zero, from: page)
+            size.height = NSHeight(rect) + margin * scaleFactor
+            //            if ([NSScroller respondsToSelector:@selector(preferredScrollerStyle)] == NO || [NSScroller preferredScrollerStyle] == NSScrollerStyleLegacy)
+            //                size.width += [NSScroller scrollerWidth];
+            if NSScroller.responds(to: NSSelectorFromString("preferredScrollerStyle")) == false {
+                let w = NSScroller.scrollerWidth(for: .regular, scrollerStyle: .legacy)
+                size.width += w
+            } else {
+                if NSScroller.preferredScrollerStyle == .legacy {
+                    let w = NSScroller.scrollerWidth(for: .regular, scrollerStyle: .legacy)
+                    size.width += w
+                }
+            }
+        }
+        if (autoScales) {
+            size.height /= scaleFactor
+        }
+
+        // Calculate the new size for the window
+        size.width = ceil(NSWidth(frame) + size.width - oldSize.width)
+        size.height = ceil(NSHeight(frame) + size.height - oldSize.height)
+        // Align the window frame from the old topleft point and constrain to the screen
+        frame.origin.y = NSMaxY(frame) - size.height
+        frame.size = size
+        if let screen = self.view.window?.screen ?? NSScreen.main {
+            frame = self.view.window?.constrainFrameRect(frame, to: screen) ?? .zero
+        }
+    
+        self.view.window?.setFrame(frame, display: self.view.window?.isVisible ?? false)
+
+        if displayMode == .singlePageContinuous || displayMode == .twoUpContinuous {
+            self.listView.go(to: NSInsetRect(page?.bounds(for: box) ?? .zero, -0.5 * margin, -0.5 * margin), on: page)
+        }
+    }
 }
 
 extension KMMainViewController: NSMenuItemValidation, NSMenuDelegate {

+ 6 - 1
PDF Office/PDF Master/Class/SystemMenu/KMSystemWindowMenu.swift

@@ -13,9 +13,12 @@ protocol KMSystemWindowMenuRrotocol {
     func menuItemAction_newTagPageToNewWindow(_ sender: Any)
     func menuItemAction_mergeAllWindow(_ sender: Any)
     func menuItemAction_currentWindowName(_ sender: Any)
+    
+    func performFit(_ sender: Any)
 }
 extension KMSystemWindowMenuRrotocol {
     func menuItemAction_currentWindowName(_ sender: Any) {}
+    func performFit(_ sender: Any) {}
 }
 
 extension KMSystemMenu.Window {
@@ -25,9 +28,11 @@ extension KMSystemMenu.Window {
     public static let mergeAllWindowSelector        = NSSelectorFromString("menuItemAction_mergeAllWindow:")
     public static let currentWindowNameSelector     = NSSelectorFromString("menuItemAction_currentWindowName:")
     
+    public static let performFitSelector     = NSSelectorFromString("performFit:")
+    
     public static func actions() -> [Selector] {
         return [self.showForwardTagPageSelector, self.showNextTagPageSelector,
-                self.newTagPageToNewWindowSelector, self.mergeAllWindowSelector,
+                self.newTagPageToNewWindowSelector, self.mergeAllWindowSelector, self.performFitSelector,
                 self.currentWindowNameSelector]
     }
 }

+ 2 - 18
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -46,8 +46,8 @@
             filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "1769"
-            endingLineNumber = "1769"
+            startingLineNumber = "1767"
+            endingLineNumber = "1767"
             landmarkName = "togglePresentation(_:)"
             landmarkType = "7">
          </BreakpointContent>
@@ -227,22 +227,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "2CC6DD25-2A0D-4DB1-AE9F-4E556C123411"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "804"
-            endingLineNumber = "804"
-            landmarkName = "toggleFullscreen(_:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent