From baaa2d4ffe81e134753070f514a3ed98ce4e951f Mon Sep 17 00:00:00 2001 From: masakih Date: Fri, 3 Nov 2017 16:14:07 +0900 Subject: [PATCH] =?utf8?q?=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=BC=E3=83=B3?= =?utf8?q?=E3=82=B7=E3=83=A7=E3=83=83=E3=83=88=E3=81=8C=E6=92=AE=E3=82=8C?= =?utf8?q?=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit #37633 完全な修正には至らず --- KCD/GameViewController.swift | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/KCD/GameViewController.swift b/KCD/GameViewController.swift index 32cc6e42..29074a74 100644 --- a/KCD/GameViewController.swift +++ b/KCD/GameViewController.swift @@ -110,13 +110,34 @@ final class GameViewController: NSViewController { @IBAction func screenShot(_ sender: AnyObject?) { - let frame = webView.visibleRect - let screenshotBorder = UserDefaults.standard[.screenShotBorderWidth] - let f = frame.insetBy(dx: -screenshotBorder, dy: -screenshotBorder) + let frame = view.visibleRect +// let screenshotBorder = UserDefaults.standard[.screenShotBorderWidth] +// let f = frame.insetBy(dx: -screenshotBorder, dy: -screenshotBorder) - guard let rep = webView.bitmapImageRepForCachingDisplay(in: f) else { return } + guard let window = view.window else { return Logger.shared.log("Can not get window") } + + let windowCoordinateFrame = view.convert(frame, to: nil) + + 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) - webView.cacheDisplay(in: frame, to: rep) AppDelegate.shared.registerScreenshot(rep, fromOnScreen: .zero) } -- 2.11.0