OSDN Git Service

洋上補給の補強増設用のショートネームをつけた
[kcd/KCD.git] / KCD / ScreenshotCollectionViewItem.swift
1 //
2 //  ScreenshotCollectionViewItem.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2016/12/29.
6 //  Copyright © 2016年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10 import Quartz
11
12 final class ScreenshotCollectionViewItem: NSCollectionViewItem {
13     
14     @IBOutlet private weak var imageBox: NSBox!
15     @IBOutlet private weak var nameField: NSTextField!
16     @IBOutlet private weak var nameBox: NSBox!
17     
18     var info: ScreenshotInformation? {
19         
20         return representedObject as? ScreenshotInformation
21     }
22     
23     var imageFrame: NSRect {
24         
25         guard let imageView = imageView else { fatalError("ScreenshotCollectionViewItem: imageView is nil") }
26         
27         let frame = centerFitRect(imageView.image, target: imageView.frame)
28         
29         return view.convert(frame, from: imageBox)
30     }
31     
32     override var isSelected: Bool {
33         
34         didSet {
35             (imageBox.fillColor, nameField.textColor, nameBox.fillColor) = {
36                 
37                 if isSelected {
38                     
39                     return (.controlHighlightColor, .white, .alternateSelectedControlColor)
40                     
41                 } else {
42                     
43                     return (.white, .black, .white)
44                 }
45             }()
46         }
47     }
48     
49     private func centerFitRect(_ image: NSImage?, target: NSRect) -> NSRect {
50         
51         guard let image = image else { return target }
52         
53         let imageSize = image.size
54         
55         let ratioX = target.size.height / imageSize.height
56         let ratioY = target.size.width / imageSize.width
57         let ratio = min(ratioY, ratioX)
58         let fitSize = NSSize(width: imageSize.width * ratio, height: imageSize.height * ratio)
59         let left = (target.size.width - fitSize.width) * 0.5
60         let bottom = (target.size.height - fitSize.height) * 0.5
61         
62         return NSRect(x: left, y: bottom, width: fitSize.width, height: fitSize.height)
63     }
64 }
65
66 extension ScreenshotCollectionViewItem: QLPreviewItem, Previewable {
67     
68     var previewItemURL: URL! {
69         
70         return info?.url
71     }
72 }
73
74 extension ScreenshotCollectionViewItem: NibLoadable { }