OSDN Git Service

Doutakuを導入
[kcd/KCD.git] / KCD / GameViewController.swift
index 32cc6e4..5ece939 100644 (file)
@@ -15,7 +15,7 @@ final class GameViewController: NSViewController {
     private static let gamePageURL = "http://www.dmm.com/netgame/social/-/gadgets/=/app_id=854854/"
     private static let loginPageURLPrefix = "https://www.dmm.com/my/-/login/=/"
     
-    @IBOutlet var webView: WebView!
+    @IBOutlet private var webView: WebView!
     
     override var nibName: NSNib.Name {
         
@@ -108,7 +108,7 @@ final class GameViewController: NSViewController {
         window.endSheet(panelWindow)
     }
     
-    @IBAction func screenShot(_ sender: AnyObject?) {
+    func screenshotOld() {
         
         let frame = webView.visibleRect
         let screenshotBorder = UserDefaults.standard[.screenShotBorderWidth]
@@ -117,7 +117,58 @@ final class GameViewController: NSViewController {
         guard let rep = webView.bitmapImageRepForCachingDisplay(in: f) else { return }
         
         webView.cacheDisplay(in: frame, to: rep)
-        AppDelegate.shared.registerScreenshot(rep, fromOnScreen: .zero)
+        
+        ScreenshotRegister(ApplicationDirecrories.screenshotSaveDirectoryURL)
+            .registerScreenshot(rep, name: localizedAppName())
+    }
+    
+    @available(OSX 10.13, *)
+    func screenshot() {
+        
+        let frame = view.visibleRect
+        let screenshotBorder = UserDefaults.standard[.screenShotBorderWidth]
+        let f = frame.insetBy(dx: -screenshotBorder, dy: -screenshotBorder)
+        let windowCoordinateFrame = view.convert(f, to: nil)
+        
+        guard let window = view.window else { return Logger.shared.log("Can not get window") }
+        let screenCoordinsteFrame = window.convertToScreen(windowCoordinateFrame)
+        
+        guard let screen = NSScreen.main else { return Logger.shared.log("Can not get Screen") }
+        let scFrame = screen.frame
+        
+        guard let cxt = window.graphicsContext?.cgContext else { return Logger.shared.log("Cannot get Context") }
+        let deviceCoordinateFrame = cxt.convertToDeviceSpace(screenCoordinsteFrame)
+        let raio = deviceCoordinateFrame.size.width / screenCoordinsteFrame.size.width
+        
+        let trimRect = CGRect(x: raio * screenCoordinsteFrame.origin.x,
+                              y: raio * (scFrame.size.height - screenCoordinsteFrame.origin.y - screenCoordinsteFrame.size.height),
+                              width: raio * screenCoordinsteFrame.size.width,
+                              height: raio * screenCoordinsteFrame.size.height)
+        
+        guard let fullSizeImage = CGDisplayCreateImage(CGMainDisplayID()) else { return Logger.shared.log("Can not get Image") }
+        
+        guard let image = fullSizeImage.cropping(to: trimRect) else { return Logger.shared.log("Can not trim image") }
+        
+        let rep = NSBitmapImageRep(cgImage: image)
+        
+        if rep.size != NSSize(width: 800, height: 480) {
+            rep.size = NSSize(width: 800, height: 480)
+        }
+        
+        ScreenshotRegister(ApplicationDirecrories.screenshotSaveDirectoryURL)
+            .registerScreenshot(rep, name: localizedAppName())
+    }
+    
+    @IBAction func screenShot(_ sender: AnyObject?) {
+        
+        if #available(OSX 10.13, *) {
+            
+            screenshot()
+            
+        } else {
+            
+            screenshotOld()
+        }
     }
     
     override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {