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 {
26             
27             fatalError("ScreenshotCollectionViewItem: imageView is nil")
28         }
29         
30         let frame = centerFitRect(imageView.image, target: imageView.frame)
31         
32         return view.convert(frame, from: imageBox)
33     }
34     
35     override var isSelected: Bool {
36         
37         didSet {
38             
39             (imageBox.fillColor, nameField.textColor, nameBox.fillColor) = {
40                 
41                 if isSelected {
42                     
43                     return (.controlHighlightColor, .white, .alternateSelectedControlColor)
44                     
45                 } else {
46                     
47                     return (.white, .black, .white)
48                 }
49             }()
50         }
51     }
52     
53     private func centerFitRect(_ image: NSImage?, target: NSRect) -> NSRect {
54         
55         guard let image = image else {
56             
57             return target
58         }
59         
60         let imageSize = image.size
61         
62         let ratioX = target.size.height / imageSize.height
63         let ratioY = target.size.width / imageSize.width
64         let ratio = min(ratioY, ratioX)
65         let fitSize = NSSize(width: imageSize.width * ratio, height: imageSize.height * ratio)
66         let left = (target.size.width - fitSize.width) * 0.5
67         let bottom = (target.size.height - fitSize.height) * 0.5
68         
69         return NSRect(x: left, y: bottom, width: fitSize.width, height: fitSize.height)
70     }
71 }
72
73 extension ScreenshotCollectionViewItem: QLPreviewItem, Previewable {
74     
75     var previewItemURL: URL! {
76         
77         return info?.url
78     }
79 }
80
81 extension ScreenshotCollectionViewItem: NibLoadable {}