Browse Source

【幻灯片】退出模式补充

tangchao 1 year ago
parent
commit
dcaa25503e

+ 68 - 8
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController+Actions.swift

@@ -131,7 +131,7 @@ extension KMBrowserWindowController {
             
             if let mainVc = (self.document as? KMMainDocument)?.mainViewController {
                 mainVc.fadeInFullScreenWindow(with: backgroundColor, level: level.rawValue)
-                mainVc.enterPresentation()
+                mainVc.enterPresentationMode()
                 mainVc.fadeInFullScreenView(mainVc.listView, inset: 0)
             }
             
@@ -176,12 +176,11 @@ extension KMBrowserWindowController {
         if wasInteractionMode == .SKLegacyFullScreenMode {
             let doc = self.document as? KMMainDocument
             view = doc?.mainViewController?.pdfSplitView
-//            contentView = centerContentView;
             contentView = doc?.mainViewController?.centerContentView
         } else {
             let doc = self.document as? KMMainDocument
             view = doc?.mainViewController?.listView
-            contentView = doc?.mainViewController?.PDFContendView
+            contentView = doc?.mainViewController?.readContentView
         }
 
         self.hideLeftSideWindow()
@@ -190,13 +189,20 @@ extension KMBrowserWindowController {
         // do this first, otherwise the navigation window may be covered by fadeWindow and then reveiled again, which looks odd
 //        [pdfView setInteractionMode:SKNormalMode];
 //
-//        [self fadeOutFullScreenView:view];
-
         // this should be done before exitPresentationMode to get a smooth transition
-        view?.frame = contentView?.bounds ?? .zero
-//        [contentView addSubview:view];
         if let v = view {
+            self.fadeOutFullScreenView(v)
+            view?.frame = contentView?.bounds ?? .zero
             contentView?.addSubview(v)
+            v.mas_makeConstraints { make in
+                make?.left.mas_equalTo()(0)
+                make?.right.mas_equalTo()(0)
+                make?.top.mas_equalTo()(0)
+                make?.bottom.mas_equalTo()(0)
+            }
+            
+            (v as? CPDFListView)?.layoutDocumentView()
+            (v as? CPDFListView)?.requiresDisplay()
         }
 
         if let mainVc = (self.document as? KMMainDocument)?.mainViewController {
@@ -219,7 +225,7 @@ extension KMBrowserWindowController {
 //        if (_isShowToolbar) {
 //            [self.toolbarViewController hiddenToolbar:NO];
 //        }
-//        [self fadeOutFullScreenWindow];
+        self.fadeOutFullScreenWindow()
 
         // the page number may have changed
         self.synchronizeWindowTitleWithDocumentName()
@@ -261,4 +267,58 @@ extension KMBrowserWindowController {
 //        [blankingWindows makeObjectsPerformSelector:@selector(fadeOut)];
 //        blankingWindows = nil;
     }
+    
+    func fadeOutFullScreenView(_ view: NSView) {
+        guard let fullScreenWindow = self.window as? KMFullScreenWindow else {
+            NSSound.beep()
+            return
+        }
+        let fadeWindow = KMFullScreenWindow(screen: fullScreenWindow.screen ?? NSScreen.main!, bgColor: fullScreenWindow.backgroundColor, level: fullScreenWindow.level.rawValue, isMain: false)
+        
+        fadeWindow.alphaValue = 0
+        fadeWindow.order(.above, relativeTo: fullScreenWindow.windowNumber)
+        fadeWindow.fadeInBlocking()
+        view.removeFromSuperview()
+        fullScreenWindow.display()
+        fullScreenWindow.delegate = nil
+        fullScreenWindow.makeFirstResponder(nil)
+        fadeWindow.orderOut(nil)
+    }
+    
+    func fadeOutFullScreenWindow() {
+        guard let fullScreenWindow = self.window as? KMFullScreenWindow else {
+            NSSound.beep()
+            return
+        }
+        
+        let mainVc = (self.document as? KMMainDocument)?.mainViewController
+        let mainWindow = mainVc?.mainWindow
+        let collectionBehavior = mainWindow?.collectionBehavior
+        
+        self.window = mainWindow
+        mainWindow?.alphaValue = 0
+        if let data = mainWindow?.responds(to: NSSelectorFromString("setAnimationBehavior:")), data {
+            mainWindow?.animationBehavior = .none
+        }
+        // trick to make sure the main window shows up in the same space as the fullscreen window
+        fullScreenWindow.addChildWindow(mainWindow!, ordered: .below)
+        fullScreenWindow.removeChildWindow(mainWindow!)
+        fullScreenWindow.level = .popUpMenu
+        // these can change due to the child window trick
+        mainWindow?.level = .normal
+        mainWindow?.alphaValue = 1.0
+        mainWindow?.collectionBehavior = collectionBehavior!
+        mainWindow?.display()
+        mainWindow?.makeFirstResponder(mainVc?.listView)
+        mainWindow?.recalculateKeyViewLoop()
+        mainWindow?.delegate = self
+        mainWindow?.makeKey()
+//        [NSApp updatePresentationOptionsForWindow:mainWindow];
+        
+        if let data = mainWindow?.responds(to: NSSelectorFromString("setAnimationBehavior:")), data {
+            mainWindow?.animationBehavior = .default
+        }
+        NSApp.removeWindowsItem(fullScreenWindow)
+        fullScreenWindow.fadeOut()
+    }
 }

+ 8 - 0
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift

@@ -23,6 +23,14 @@ import Cocoa
     
     // 记录当前显示模式
     var _interactionMode: SKInteractionMode = .SKNormalMode
+    var interactionMode: SKInteractionMode {
+        get {
+            return self._interactionMode
+        }
+        set {
+            self._interactionMode = newValue
+        }
+    }
     var _mwcFlags: MwcFlags = MwcFlags()
     
     deinit {

+ 8 - 14
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -755,10 +755,6 @@ extension KMMainViewController {
 //        pdfView().setInteractionMode(SKPresentationMode)
     }
     
-    func mainWindow() -> NSWindow? {
-        return self.view.window
-    }
-    
     func removeBlankingWindows() {
 //        blankingWindows.makeObjectsPerform(#selector(fadeOut))
 //        blankingWindows = nil
@@ -1485,26 +1481,24 @@ extension KMMainViewController {
         if view.isDescendant(of: pdfSplitView){
             self.view.window?.makeFirstResponder(nil)
         }
-//        let fullScreenWindow = SKFullScreenWindow(screen: mainWindow().screen, backgroundColor: backgroundColor, level: NSPopUpMenuWindowLevel, isMain: true)
         
-        let fullScreenWindow = KMFullScreenWindow(screen: (mainWindow()?.screen ?? NSScreen.main)!, bgColor: backgroundColor, level: NSWindow.Level.popUpMenu.rawValue, isMain: true)
+        self._mainWindow = self.view.window
+        let fullScreenWindow = KMFullScreenWindow(screen: (self.mainWindow?.screen ?? NSScreen.main)!, bgColor: backgroundColor, level: NSWindow.Level.popUpMenu.rawValue, isMain: true)
         
-        mainWindow()?.delegate = nil
+        self.mainWindow?.delegate = nil
         fullScreenWindow.fadeInBlocking()
-//        let window = NSWindow.currentWindow()
-//        window.windowController?.window = fullScreenWindow
         self.browserWindowController?.window = fullScreenWindow
         fullScreenWindow.makeKey()
         
 //        NSApp.updatePresentationOptions(for: fullScreenWindow)
         
         let sel = NSSelectorFromString("setAnimationBehavior:")
-        if mainWindow()?.responds(to: sel) ?? false{
-            mainWindow()?.animationBehavior = .none
+        if self.mainWindow?.responds(to: sel) ?? false{
+            self.mainWindow?.animationBehavior = .none
         }
-        mainWindow()?.orderOut(nil)
-        if mainWindow()?.responds(to: sel) ?? false{
-            mainWindow()?.animationBehavior = .default
+        self.mainWindow?.orderOut(nil)
+        if self.mainWindow?.responds(to: sel) ?? false{
+            self.mainWindow?.animationBehavior = .default
         }
         fullScreenWindow.level = NSWindow.Level(rawValue: level)
         fullScreenWindow.orderFront(nil)

+ 15 - 6
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift

@@ -205,6 +205,15 @@ let LOCKED_KEY  = "locked"
     
     
     var repeatTrialLoad: Bool = false
+    var _mainWindow: NSWindow?
+    var mainWindow: NSWindow? {
+        get {
+            return self._mainWindow
+        }
+        set {
+            self._mainWindow = newValue
+        }
+    }
     
     deinit {
         NotificationCenter.default.removeObserver(self)
@@ -838,11 +847,11 @@ let LOCKED_KEY  = "locked"
             guideWC.openPanelRect = (self.view.window?.contentView?.convert(leftPanelItem.frame, from: leftPanelItem.superview)) ?? CGRectZero
             guideWC.window?.collectionBehavior = [.canJoinAllSpaces]
             guideWC.normalGuideFinishHandle = { [weak self] windowVC in
-                let rightPanelItem:KMToolbarItemView = self!.toolbarController.findItem("KMRightControlToolbarItemIdentifier")!
-                let digitalPanelItem:KMToolbarItemView = self!.toolbarController.findItem("KMDocumentDigitalSignToolbarItemIdentifier")!
+                let rightPanelItem = self?.toolbarController.findItem(KMRightControlToolbarItemIdentifier)
+                let digitalPanelItem = self?.toolbarController.findItem(KMDocumentDigitalSignToolbarItemIdentifier)
                                 
-                windowVC.rightPanelRect = (self!.view.window?.contentView?.convert(rightPanelItem.frame, from: rightPanelItem.superview))!
-                guideWC.digitalBoxRect = (self!.view.window?.contentView?.convert(digitalPanelItem.frame, from: digitalPanelItem.superview))!
+                windowVC.rightPanelRect = (self!.view.window?.contentView?.convert(rightPanelItem?.frame ?? .zero, from: rightPanelItem?.superview)) ?? .zero
+                guideWC.digitalBoxRect = (self!.view.window?.contentView?.convert(digitalPanelItem?.frame ?? .zero, from: digitalPanelItem?.superview)) ?? .zero
                 
             }
             guideWC.finishHandle = { [weak self] windowVC, type in
@@ -1774,8 +1783,8 @@ let LOCKED_KEY  = "locked"
         keyEventMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in
 //            print(event.keyCode)
             if event.keyCode == 53 {
-                if let data = self?.interactionMode, data == .SKPresentationMode { // 幻灯片模式下
-                    if let data = self?.canExitPresentation(), data {
+                if let data = self?.browserWindowController?.interactionMode, data == .SKPresentationMode { // 幻灯片模式下
+                    if let data = self?.browserWindowController?.canExitPresentation(), data {
                         self?.browserWindowController?.exitFullscreen()
                     }
                     return nil

+ 2 - 2
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 = "1763"
-            endingLineNumber = "1763"
+            startingLineNumber = "1771"
+            endingLineNumber = "1771"
             landmarkName = "togglePresentation(_:)"
             landmarkType = "7">
          </BreakpointContent>