OSDN Git Service

Equatableを自動実装させるようにした
[kcd/KCD.git] / KCD / ScreenshotEditorViewController.swift
index 58e8a3e..52600c9 100644 (file)
@@ -8,18 +8,19 @@
 
 import Cocoa
 
-private struct EditedImage {
+private struct URLImage {
     
-    var editedImage: NSImage
+    var image: NSImage
     var url: URL
     
     init(image: NSImage, url: URL) {
         
-        editedImage = image
+        self.image = image
         self.url = url
     }
 }
 
+/// 切り取りサイズ、位置と名前
 final class TrimRectInformation: NSObject {
     
     @objc private(set) var name: String
@@ -34,15 +35,14 @@ final class TrimRectInformation: NSObject {
 
 final class ScreenshotEditorViewController: BridgeViewController {
     
-    @objc let trimInfo: [TrimRectInformation]
+    @objc let trimInfo = [
+        TrimRectInformation(name: "Status", rect: NSRect(x: 328, y: 13, width: 470, height: 365)),
+        TrimRectInformation(name: "List", rect: NSRect(x: 362, y: 15, width: 438, height: 368)),
+        TrimRectInformation(name: "AirplaneBase", rect: NSRect(x: 575, y: 13, width: 225, height: 358))
+    ]
     
     override init(nibName: NSNib.Name?, bundle: Bundle?) {
         
-        trimInfo = [
-            TrimRectInformation(name: "Status", rect: NSRect(x: 328, y: 13, width: 470, height: 365)),
-            TrimRectInformation(name: "List", rect: NSRect(x: 362, y: 15, width: 438, height: 368)),
-            TrimRectInformation(name: "AirplaneBase", rect: NSRect(x: 575, y: 13, width: 225, height: 358))
-        ]
         currentTrimInfo = trimInfo[0]
         
         super.init(nibName: ScreenshotEditorViewController.nibName, bundle: nil)
@@ -54,13 +54,14 @@ final class ScreenshotEditorViewController: BridgeViewController {
     }
     
     
-    @IBOutlet weak var tiledImageView: TiledImageView!
-    @IBOutlet weak var doneButton: NSButton!
+    @IBOutlet private weak var tiledImageView: TiledImageView!
+    @IBOutlet private weak var doneButton: NSButton!
     
     @objc var columnCount: Int {
         
         get { return tiledImageView.columnCount }
         set {
+            
             tiledImageView.columnCount = newValue
             UserDefaults.standard[.screenshotEditorColumnCount] = newValue
         }
@@ -75,7 +76,11 @@ final class ScreenshotEditorViewController: BridgeViewController {
         
         get { return realiesCurrentTrimInforIndex }
         set {
-            guard 0..<trimInfo.count ~= newValue else { return }
+            
+            guard case 0..<trimInfo.count = newValue else {
+                
+                return
+            }
             
             realiesCurrentTrimInforIndex = newValue
             currentTrimInfo = trimInfo[newValue]
@@ -84,16 +89,21 @@ final class ScreenshotEditorViewController: BridgeViewController {
     
     private var editedImage: NSImage?
     private var currentSelection: [ScreenshotInformation] = []
-    private var editedImages: [EditedImage] = []
+    private var originalImages: [URLImage] = []
     private var realiesCurrentTrimInforIndex = UserDefaults.standard[.scrennshotEditorType]
     private var currentTrimInfo: TrimRectInformation {
         
         didSet {
-            makeEditedImage()
+            
+            makeTrimedImage()
             trimInfo
                 .index {
                     
-                    if $0.name != currentTrimInfo.name { return false }
+                    if $0.name != currentTrimInfo.name {
+                        
+                        return false
+                    }
+                    
                     return $0.rect == currentTrimInfo.rect
                 }
                 .map { UserDefaults.standard[.scrennshotEditorType] = $0 }
@@ -124,66 +134,71 @@ final class ScreenshotEditorViewController: BridgeViewController {
     
     private func updateSelections() {
         
-        guard let selection = arrayController.selectedObjects as? [ScreenshotInformation] else { return }
+        guard let selection = arrayController.selectedObjects as? [ScreenshotInformation] else {
+            
+            return
+        }
         
-        if selection == currentSelection { return }
+        if selection == currentSelection {
+            
+            return
+        }
         
-        let removed: [ScreenshotInformation] = currentSelection.flatMap {
+        let removed: [ScreenshotInformation] = currentSelection.compactMap {
             
             selection.contains($0) ? nil : $0
         }
         
-        let appended: [ScreenshotInformation] = selection.flatMap {
+        let appended: [ScreenshotInformation] = selection.compactMap {
             
             currentSelection.contains($0) ? nil : $0
         }
         
         removed.forEach {
             
-            removeEditedImage(url: $0.url)
+            removeOriginalImage(url: $0.url)
         }
         
         appended.forEach {
             
-            appendEditedImage(url: $0.url)
+            appendOriginalImage(url: $0.url)
         }
         
         currentSelection = selection
-        makeEditedImage()
+        makeTrimedImage()
     }
     
-    private func removeEditedImage(url: URL) {
+    private func removeOriginalImage(url: URL) {
         
-        _ = editedImages
+        _ = originalImages
             .index { $0.url == url }
-            .map { editedImages.remove(at: $0) }
+            .map { originalImages.remove(at: $0) }
     }
     
-    private func appendEditedImage(url: URL) {
+    private func appendOriginalImage(url: URL) {
         
         NSImage(contentsOf: url)
-            .flatMap { EditedImage(image: $0, url: url) }
-            .map { editedImages.append($0) }
+            .flatMap { URLImage(image: $0, url: url) }
+            .map { originalImages.append($0) }
     }
     
-    private func makeEditedImage() {
+    private func makeTrimedImage() {
         
-        guard !editedImages.isEmpty else {
+        guard !originalImages.isEmpty else {
             
             tiledImageView.images = []
+            
             return
         }
         
         DispatchQueue(label: "makeTrimedImage queue").async {
             
-            let images: [NSImage] = self.editedImages.flatMap {
-                
-                guard let originalImage = NSImage(contentsOf: $0.url) else { return nil }
+            let images: [NSImage] = self.originalImages.compactMap {
                 
                 let trimedImage = NSImage(size: self.currentTrimInfo.rect.size)
                 
                 trimedImage.lockFocus()
-                originalImage.draw(at: .zero,
+                $0.image.draw(at: .zero,
                                    from: self.currentTrimInfo.rect,
                                    operation: .copy,
                                    fraction: 1.0)