5 // Created by Hori,Masaki on 2018/06/24.
6 // Copyright © 2018年 Hori,Masaki. All rights reserved.
31 init(_ name: String) {
37 extension ColorName: Equatable {
39 static func == (lhs: ColorName, rhs: ColorName) -> Bool {
41 return lhs.name == rhs.name
48 static let damageViewInnerSlightly = ColorName("DamageView.inner.slightly")
49 static let damageViewInnerModest = ColorName("DamageView.inner.modest")
50 static let damageViewInnerBadly = ColorName("DamageView.inner.badly")
51 static let damageViewBoarderSlightly = ColorName("DamageView.border.slightly")
52 static let damageViewBoarderModest = ColorName("DamageView.border.modest")
53 static let damageViewBoarderBadly = ColorName("DamageView.border.badly")
55 // for AirPlanInfoView
56 static let airPlanInforViewNormal = ColorName("AirPlanInfoView.normal")
57 static let airPlanInforViewTired = ColorName("AirPlanInfoView.tired")
58 static let airPlanInforViewBad = ColorName("AirPlanInfoView.bad")
59 static let airPlanInforViewBoarderNormal = ColorName("AirPlanInfoView.boarder.normal")
60 static let airPlanInforViewBoarderTired = ColorName("AirPlanInfoView.border.tired")
61 static let airPlanInforViewBoarderBad = ColorName("AirPlanInfoView.boarder.bad")
64 static let suppliesCellGreen = ColorName("SuppliesCell.greenColor")
65 static let suppliesCellYellow = ColorName("SuppliesCell.yellowColor")
66 static let suppliesCellOrange = ColorName("SuppliesCell.orangeColor")
67 static let suppliesCellRedColor = ColorName("SuppliesCell.redColor")
68 static let suppliesCellBorder = ColorName("SuppliesCell.borderColor")
69 static let suppliesCellBackground = ColorName("SuppliesCell.backgroundColor")
71 // for SlotItemLevelView
72 static let slotItemLevelViewLevel = ColorName("SlotItemLevelView.levelColor")
73 static let slotItemLevelViewLowAirLevel = ColorName("SlotItemLevelView.airLevel.low")
74 static let slotItemLevelViewHighAirLevel = ColorName("SlotItemLevelView.airLevel.high")
75 static let slotItemLevelViewLowAirLevelShadow = ColorName("SlotItemLevelView.airLevel.low.shadow")
76 static let slotItemLevelViewHighAirLevelShadow = ColorName("SlotItemLevelView.airLevel.high.shadow")
81 subscript(named: ColorName) -> NSColor { get }
85 struct ColorSetManager {
87 static var current: ColorSet {
89 switch currentMode() {
91 case .normal: return BaseColorSet.shared
93 case .highContrast: return HighContrastColorSet.shared
95 case .dark: return DarkModeColorSet.shared
97 case .highContrastDark: return HighContrastDarkModeColorSet.shared
101 private static func currentMode() -> AppearanceMode {
103 if #available(macOS 10.14, *) {
105 return currentMode1014()
108 if NSWorkspace.shared.accessibilityDisplayShouldIncreaseContrast {
116 @available(macOS 10.14, *)
117 private static func currentMode1014() -> AppearanceMode {
119 switch NSAppearance.current.name {
121 case .aqua: return .normal
123 /// not available in macOS 10.13 SDK
124 // case .accessibilityHighContrastAqua: return .highContrast
126 // case .darkAqua: return .dark
128 // case .accessibilityHighContrastDarkAqua: return .highContrastDark
130 default: return .normal
135 private struct BaseColorSet: ColorSet {
137 static let shared = BaseColorSet()
139 subscript(named: ColorName) -> NSColor {
143 case .damageViewInnerSlightly: return #colorLiteral(red: 1.000, green: 0.956, blue: 0.012, alpha: 0.5)
145 case .damageViewInnerModest: return NSColor.orange.withAlphaComponent(0.5)
147 case .damageViewInnerBadly: return NSColor.red.withAlphaComponent(0.5)
149 case .damageViewBoarderSlightly: return NSColor.orange.withAlphaComponent(0.5)
151 case .damageViewBoarderModest: return NSColor.orange.withAlphaComponent(0.9)
153 case .damageViewBoarderBadly: return NSColor.red.withAlphaComponent(0.9)
156 case .airPlanInforViewNormal: return .clear
158 case .airPlanInforViewTired: return #colorLiteral(red: 1, green: 0.7233425379, blue: 0.1258574128, alpha: 0.8239436619)
160 case .airPlanInforViewBad: return #colorLiteral(red: 0.7320367694, green: 0.07731548697, blue: 0.06799335033, alpha: 1)
162 case .airPlanInforViewBoarderNormal: return .clear
164 case .airPlanInforViewBoarderTired: return #colorLiteral(red: 0.458858192, green: 0.3335277438, blue: 0.07979661971, alpha: 1)
166 case .airPlanInforViewBoarderBad: return #colorLiteral(red: 0.5462518334, green: 0.04599834234, blue: 0.04913448542, alpha: 1)
169 case .suppliesCellGreen: return NSColor(calibratedWhite: 0.39, alpha: 1.0)
171 case .suppliesCellYellow: return NSColor(calibratedWhite: 0.55, alpha: 1.0)
173 case .suppliesCellOrange: return NSColor(calibratedWhite: 0.7, alpha: 1.0)
175 case .suppliesCellRedColor: return NSColor(calibratedWhite: 0.79, alpha: 1.0)
177 case .suppliesCellBorder: return .gridColor
179 case .suppliesCellBackground: return .controlColor
182 case .slotItemLevelViewLevel: return #colorLiteral(red: 0.135, green: 0.522, blue: 0.619, alpha: 1)
184 case .slotItemLevelViewLowAirLevel: return #colorLiteral(red: 0.257, green: 0.523, blue: 0.643, alpha: 1)
186 case .slotItemLevelViewHighAirLevel: return #colorLiteral(red: 0.784, green: 0.549, blue: 0.000, alpha: 1)
188 case .slotItemLevelViewLowAirLevelShadow: return #colorLiteral(red: 0.095, green: 0.364, blue: 0.917, alpha: 1)
190 case .slotItemLevelViewHighAirLevelShadow: return .yellow
192 default: return .clear
199 private protocol SpecialColorSet: ColorSet {
201 func color(named: ColorName) -> NSColor?
204 private extension SpecialColorSet {
206 subscript(named: ColorName) -> NSColor {
208 return color(named: named) ?? BaseColorSet.shared[named]
213 private struct HighContrastColorSet: SpecialColorSet {
215 static let shared = HighContrastColorSet()
217 func color(named: ColorName) -> NSColor? {
221 case .damageViewBoarderSlightly: return .red
223 case .damageViewBoarderModest: return .red
225 case .damageViewBoarderBadly: return .red
232 private struct DarkModeColorSet: SpecialColorSet {
234 static let shared = DarkModeColorSet()
236 func color(named: ColorName) -> NSColor? {
245 private struct HighContrastDarkModeColorSet: SpecialColorSet {
247 static let shared = HighContrastDarkModeColorSet()
249 func color(named: ColorName) -> NSColor? {