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
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)
}
- @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
}
get { return realiesCurrentTrimInforIndex }
set {
- guard 0..<trimInfo.count ~= newValue else { return }
+
+ guard case 0..<trimInfo.count = newValue else {
+
+ return
+ }
realiesCurrentTrimInforIndex = newValue
currentTrimInfo = trimInfo[newValue]
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 }
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)