OSDN Git Service

Doutakuを導入
[kcd/KCD.git] / KCD / SlotItemLevelView.swift
index 9b52b17..a5da065 100644 (file)
@@ -45,15 +45,14 @@ 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
@@ -61,7 +60,7 @@ final class SlotItemLevelView: NSTextField {
             guard let itemId = slotItemID as? Int else { return }
             
             slotItemController.content = ServerDataStore.default.slotItem(by: itemId)
-            needsDisplay = true
+            needsDisplayInMainThread()
         }
     }
     
@@ -98,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 {
@@ -265,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
@@ -299,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
             
@@ -321,7 +258,7 @@ final class SlotItemLevelView: NSTextField {
         
         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)