OSDN Git Service

Doutakuを導入
[kcd/KCD.git] / KCD / SlotItemLevelView.swift
index a0946f2..a5da065 100644 (file)
@@ -45,24 +45,22 @@ final class SlotItemLevelView: NSTextField {
     @objc dynamic var slotItemController = NSObjectController()
     @objc dynamic var slotItemLevel: NSNumber? {
         
-        didSet { needsDisplay = true }
+        didSet { needsDisplayInMainThread() }
     }
     
     @objc dynamic var slotItemAlv: NSNumber? {
         
-        didSet { needsDisplay = true }
+        didSet { needsDisplayInMainThread() }
     }
     
-    
     @objc var slotItemID: NSNumber? {
         didSet {
             slotItemController.content = nil
             
-            guard let itemId = slotItemID as? Int
-                else { return }
+            guard let itemId = slotItemID as? Int else { return }
             
             slotItemController.content = ServerDataStore.default.slotItem(by: itemId)
-            needsDisplay = true
+            needsDisplayInMainThread()
         }
     }
     
@@ -99,150 +97,88 @@ final class SlotItemLevelView: NSTextField {
         return SlotItemLevelView.sCharacterProtrudeMaskImageMaskImage!
     }
     
-    private var levelOneBezierPath: NSBezierPath? {
+    private var levelOneBezierPath: Polygon {
         
         let width = bounds.width
         let height = bounds.height
-        let path = multiline(lines: [
-            (
-                NSPoint(x: width - offset, y: 0),
-                NSPoint(x: width - offset, y: height)
-            )
-            ])
-        path.lineWidth = 1.0
-        
-        return path
+        return Polygon(lineWidth: 1.0)
+            .move(to: NSPoint(x: width - offset, y: 0))
+            .line(to: NSPoint(x: width - offset, y: height))
     }
     
-    private var levelTwoBezierPath: NSBezierPath? {
+    private var levelTwoBezierPath: Polygon {
         
         let width = bounds.width
         let height = bounds.height
-        let path = multiline(lines:
-            [
-                (
-                    NSPoint(x: width - offset, y: 0),
-                    NSPoint(x: width - offset, y: height)
-                ),
-                (
-                    NSPoint(x: width - offset - padding, y: 0),
-                    NSPoint(x: width - offset - padding, y: height)
-                )
-            ])
-        path.lineWidth = 1.0
-        
-        return path
+        return Polygon(lineWidth: 1.0)
+            .move(to: NSPoint(x: width - offset, y: 0))
+            .line(to: NSPoint(x: width - offset, y: height))
+            .move(to: NSPoint(x: width - offset - padding, y: 0))
+            .line(to: NSPoint(x: width - offset - padding, y: height))
     }
     
-    private var levelThreeBezierPath: NSBezierPath? {
+    private var levelThreeBezierPath: Polygon {
         
         let width = bounds.width
         let height = bounds.height
-        let path = multiline(lines:
-            [
-                (
-                    NSPoint(x: width - offset, y: 0),
-                    NSPoint(x: width - offset, y: height)
-                ),
-                (
-                    NSPoint(x: width - offset - padding, y: 0),
-                    NSPoint(x: width - offset - padding, y: height)
-                ),
-                (
-                    NSPoint(x: width - offset - padding * 2, y: 0),
-                    NSPoint(x: width - offset - padding * 2, y: height)
-                )
-            ])
-        path.lineWidth = 1.0
-        
-        return path
+        return Polygon(lineWidth: 1.0)
+            .move(to: NSPoint(x: width - offset, y: 0))
+            .line(to: NSPoint(x: width - offset, y: height))
+            .move(to: NSPoint(x: width - offset - padding, y: 0))
+            .line(to: NSPoint(x: width - offset - padding, y: height))
+            .move(to: NSPoint(x: width - offset - padding * 2, y: 0))
+            .line(to: NSPoint(x: width - offset - padding * 2, y: height))
     }
     
-    private var levelFourBezierPath: NSBezierPath? {
+    private var levelFourBezierPath: Polygon {
         
         let width = bounds.width
         let height = bounds.height
-        let path = multiline(lines:
-            [
-                (
-                    NSPoint(x: width - offset - slideOffset, y: 0),
-                    NSPoint(x: width - offset, y: height)
-                )
-            ])
-        path.lineWidth = 2.0
-        
-        return path
+        return Polygon(lineWidth: 2.0)
+            .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset, y: height))
     }
     
-    private var levelFiveBezierPath: NSBezierPath? {
+    private var levelFiveBezierPath: Polygon {
         
         let width = bounds.width
         let height = bounds.height
-        let path = multiline(lines:
-            [
-                (
-                    NSPoint(x: width - offset - slideOffset, y: 0),
-                    NSPoint(x: width - offset, y: height)
-                ),
-                (
-                    NSPoint(x: width - offset - padding - slideOffset, y: 0),
-                    NSPoint(x: width - offset - padding, y: height)
-                )
-            ])
-        path.lineWidth = 2.0
-        
-        return path
+        return Polygon(lineWidth: 2.0)
+            .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset, y: height))
+            .move(to: NSPoint(x: width - offset - padding - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset - padding, y: height))
     }
     
-    private var levelSixBezierPath: NSBezierPath? {
+    private var levelSixBezierPath: Polygon {
         
         let width = bounds.width
         let height = bounds.height
-        let path = multiline(lines:
-            [
-                (
-                    NSPoint(x: width - offset - slideOffset, y: 0),
-                    NSPoint(x: width - offset, y: height)
-                ),
-                (
-                    NSPoint(x: width - offset - padding - slideOffset, y: 0),
-                    NSPoint(x: width - offset - padding, y: height)
-                ),
-                (
-                    NSPoint(x: width - offset - padding * 2 - slideOffset, y: 0),
-                    NSPoint(x: width - offset - padding * 2, y: height)
-                )
-            ])
-        path.lineWidth = 2.0
-        
-        return path
+        return Polygon(lineWidth: 2.0)
+            .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset, y: height))
+            .move(to: NSPoint(x: width - offset - padding - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset - padding, y: height))
+            .move(to: NSPoint(x: width - offset - padding * 2 - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset - padding * 2, y: height))
     }
     
-    private var levelSevenBezierPath: NSBezierPath? {
+    private var levelSevenBezierPath: Polygon {
         
         let width = bounds.width
         let height = bounds.height
-        let path = polyline(points:
-            [
-                NSPoint(x: width - offset - slideOffset, y: 0),
-                NSPoint(x: width - offset, y: height * 0.5),
-                NSPoint(x: width - offset - anglePoint, y: height)
-            ])
-        polyline(points:
-            [
-                NSPoint(x: width - offset - padding - slideOffset, y: 0),
-                NSPoint(x: width - offset - padding, y: height * 0.5),
-                NSPoint(x: width - offset - padding - anglePoint, y: height)
-            ])
-            .map { path?.append($0) }
-        path?.lineWidth = 2.0
-        
-        return path
+        return Polygon(lineWidth: 2.0)
+            .move(to: NSPoint(x: width - offset - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset, y: height * 0.5))
+            .line(to: NSPoint(x: width - offset - anglePoint, y: height))
+            .move(to: NSPoint(x: width - offset - padding - slideOffset, y: 0))
+            .line(to: NSPoint(x: width - offset - padding, y: height * 0.5))
+            .line(to: NSPoint(x: width - offset - padding - anglePoint, y: height))
     }
     
     private var levelFont: NSFont {
         
-        return NSFont.monospacedDigitSystemFont(ofSize: NSFont.smallSystemFontSize, weight: .regular)
+        return .monospacedDigitSystemFont(ofSize: NSFont.smallSystemFontSize, weight: .regular)
     }
     
     private var levelColor: NSColor {
@@ -253,8 +189,7 @@ final class SlotItemLevelView: NSTextField {
     // MARK: - Function
     override func draw(_ dirtyRect: NSRect) {
         
-        guard let context = NSGraphicsContext.current?.cgContext
-            else { fatalError("Con not get current CGContext") }
+        guard let context = NSGraphicsContext.current?.cgContext else { fatalError("Con not get current CGContext") }
         
         context.saveGState()
         maskImage.map { context.clip(to: bounds, mask: $0) }
@@ -267,7 +202,7 @@ final class SlotItemLevelView: NSTextField {
         drawAirLevel()
     }
     
-    private func bezierPathForALevel(level: Int) -> NSBezierPath? {
+    private func bezierPathForALevel(level: Int) -> Polygon? {
         
         switch level {
         case 1: return levelOneBezierPath
@@ -301,7 +236,7 @@ final class SlotItemLevelView: NSTextField {
             
         case 4, 5, 6, 7:
             let shadow = NSShadow()
-            shadow.shadowColor = NSColor.yellow
+            shadow.shadowColor = .yellow
             shadow.shadowBlurRadius = 3.0
             return shadow
             
@@ -312,8 +247,7 @@ final class SlotItemLevelView: NSTextField {
     
     private func drawAirLevel() {
         
-        guard let alv = slotItemAlv as? Int
-            else { return }
+        guard let alv = slotItemAlv as? Int else { return }
         
         colorForALevel(level: alv)?.set()
         shadowForALevel(level: alv)?.set()
@@ -322,10 +256,9 @@ final class SlotItemLevelView: NSTextField {
     
     private func drawLevel() {
         
-        guard let lv = slotItemLevel as? Int, lv != 0
-            else { return }
+        guard let lv = slotItemLevel as? Int, lv != 0 else { return }
         
-        let string: String = lv == 10 ? "max" : "★+\(lv)"
+        let string = (lv == 10 ? "max" : "★+\(lv)")
         let attr: [NSAttributedStringKey: Any] = [.font: levelFont,
                                                   .foregroundColor: levelColor]
         let attributedString = NSAttributedString(string: string, attributes: attr)