5 // Created by Hori,Masaki on 2018/06/24.
6 // Copyright © 2018年 Hori,Masaki. All rights reserved.
22 extension AppearanceMode {
24 static var current: AppearanceMode {
26 if #available(macOS 10.14, *) {
28 return currentMode1014()
31 if NSWorkspace.shared.accessibilityDisplayShouldIncreaseContrast {
39 @available(macOS 10.14, *)
40 private static func currentMode1014() -> AppearanceMode {
42 switch NSAppearance.current.name {
44 case .aqua: return .normal
46 /// not available in macOS 10.13 SDK
47 // case .accessibilityHighContrastAqua: return .highContrast
49 // case .darkAqua: return .dark
51 // case .accessibilityHighContrastDarkAqua: return .highContrastDark
53 default: return .normal
60 private let name: String
62 private init(_ name: String) {
68 extension ColorName: Equatable {
70 static func == (lhs: ColorName, rhs: ColorName) -> Bool {
72 return lhs.name == rhs.name
79 static let damageViewInnerSlightly = ColorName("DamageView.inner.slightly")
80 static let damageViewInnerModest = ColorName("DamageView.inner.modest")
81 static let damageViewInnerBadly = ColorName("DamageView.inner.badly")
82 static let damageViewBoarderSlightly = ColorName("DamageView.border.slightly")
83 static let damageViewBoarderModest = ColorName("DamageView.border.modest")
84 static let damageViewBoarderBadly = ColorName("DamageView.border.badly")
86 // for AirPlanInfoView
87 static let airPlanInforViewNormal = ColorName("AirPlanInfoView.normal")
88 static let airPlanInforViewTired = ColorName("AirPlanInfoView.tired")
89 static let airPlanInforViewBad = ColorName("AirPlanInfoView.bad")
90 static let airPlanInforViewBoarderNormal = ColorName("AirPlanInfoView.boarder.normal")
91 static let airPlanInforViewBoarderTired = ColorName("AirPlanInfoView.border.tired")
92 static let airPlanInforViewBoarderBad = ColorName("AirPlanInfoView.boarder.bad")
95 static let suppliesCellGreen = ColorName("SuppliesCell.greenColor")
96 static let suppliesCellYellow = ColorName("SuppliesCell.yellowColor")
97 static let suppliesCellOrange = ColorName("SuppliesCell.orangeColor")
98 static let suppliesCellRedColor = ColorName("SuppliesCell.redColor")
99 static let suppliesCellBorder = ColorName("SuppliesCell.borderColor")
100 static let suppliesCellBackground = ColorName("SuppliesCell.backgroundColor")
102 // for SlotItemLevelView
103 static let slotItemLevelViewLevel = ColorName("SlotItemLevelView.levelColor")
104 static let slotItemLevelViewLowAirLevel = ColorName("SlotItemLevelView.airLevel.low")
105 static let slotItemLevelViewHighAirLevel = ColorName("SlotItemLevelView.airLevel.high")
106 static let slotItemLevelViewLowAirLevelShadow = ColorName("SlotItemLevelView.airLevel.low.shadow")
107 static let slotItemLevelViewHighAirLevelShadow = ColorName("SlotItemLevelView.airLevel.high.shadow")
112 subscript(named: ColorName) -> NSColor { get }
116 struct ColorSetManager {
118 static var current: ColorSet {
120 switch AppearanceMode.current {
122 case .normal: return BaseColorSet.shared
124 case .highContrast: return HighContrastColorSet.shared
126 case .dark: return DarkModeColorSet.shared
128 case .highContrastDark: return HighContrastDarkModeColorSet.shared
133 private struct BaseColorSet: ColorSet {
135 static let shared = BaseColorSet()
137 subscript(named: ColorName) -> NSColor {
141 case .damageViewInnerSlightly: return #colorLiteral(red: 1.000, green: 0.956, blue: 0.012, alpha: 0.5)
143 case .damageViewInnerModest: return NSColor.orange.withAlphaComponent(0.5)
145 case .damageViewInnerBadly: return NSColor.red.withAlphaComponent(0.5)
147 case .damageViewBoarderSlightly: return NSColor.orange.withAlphaComponent(0.5)
149 case .damageViewBoarderModest: return NSColor.orange.withAlphaComponent(0.9)
151 case .damageViewBoarderBadly: return NSColor.red.withAlphaComponent(0.9)
154 case .airPlanInforViewNormal: return .clear
156 case .airPlanInforViewTired: return #colorLiteral(red: 1, green: 0.7233425379, blue: 0.1258574128, alpha: 0.8239436619)
158 case .airPlanInforViewBad: return #colorLiteral(red: 0.7320367694, green: 0.07731548697, blue: 0.06799335033, alpha: 1)
160 case .airPlanInforViewBoarderNormal: return .clear
162 case .airPlanInforViewBoarderTired: return #colorLiteral(red: 0.458858192, green: 0.3335277438, blue: 0.07979661971, alpha: 1)
164 case .airPlanInforViewBoarderBad: return #colorLiteral(red: 0.5462518334, green: 0.04599834234, blue: 0.04913448542, alpha: 1)
167 case .suppliesCellGreen: return NSColor(calibratedWhite: 0.39, alpha: 1.0)
169 case .suppliesCellYellow: return NSColor(calibratedWhite: 0.55, alpha: 1.0)
171 case .suppliesCellOrange: return NSColor(calibratedWhite: 0.7, alpha: 1.0)
173 case .suppliesCellRedColor: return NSColor(calibratedWhite: 0.79, alpha: 1.0)
175 case .suppliesCellBorder: return .gridColor
177 case .suppliesCellBackground: return .controlColor
180 case .slotItemLevelViewLevel: return #colorLiteral(red: 0.135, green: 0.522, blue: 0.619, alpha: 1)
182 case .slotItemLevelViewLowAirLevel: return #colorLiteral(red: 0.257, green: 0.523, blue: 0.643, alpha: 1)
184 case .slotItemLevelViewHighAirLevel: return #colorLiteral(red: 0.784, green: 0.549, blue: 0.000, alpha: 1)
186 case .slotItemLevelViewLowAirLevelShadow: return #colorLiteral(red: 0.095, green: 0.364, blue: 0.917, alpha: 1)
188 case .slotItemLevelViewHighAirLevelShadow: return .yellow
190 default: return .clear
197 private protocol SpecialColorSet: ColorSet {
199 func color(named: ColorName) -> NSColor?
202 private extension SpecialColorSet {
204 subscript(named: ColorName) -> NSColor {
206 return color(named: named) ?? BaseColorSet.shared[named]
211 private struct HighContrastColorSet: SpecialColorSet {
213 static let shared = HighContrastColorSet()
215 func color(named: ColorName) -> NSColor? {
219 case .damageViewBoarderSlightly: return .red
221 case .damageViewBoarderModest: return .red
223 case .damageViewBoarderBadly: return .red
230 private struct DarkModeColorSet: SpecialColorSet {
232 static let shared = DarkModeColorSet()
234 func color(named: ColorName) -> NSColor? {
243 private struct HighContrastDarkModeColorSet: SpecialColorSet {
245 static let shared = HighContrastDarkModeColorSet()
247 func color(named: ColorName) -> NSColor? {