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
58 struct ColorName: Equatable {
60 private let name: String
62 private init(_ name: String) {
71 static let damageViewInnerSlightly = ColorName("DamageView.inner.slightly")
72 static let damageViewInnerModest = ColorName("DamageView.inner.modest")
73 static let damageViewInnerBadly = ColorName("DamageView.inner.badly")
74 static let damageViewBoarderSlightly = ColorName("DamageView.border.slightly")
75 static let damageViewBoarderModest = ColorName("DamageView.border.modest")
76 static let damageViewBoarderBadly = ColorName("DamageView.border.badly")
78 // for AirPlanInfoView
79 static let airPlanInforViewNormal = ColorName("AirPlanInfoView.normal")
80 static let airPlanInforViewTired = ColorName("AirPlanInfoView.tired")
81 static let airPlanInforViewBad = ColorName("AirPlanInfoView.bad")
82 static let airPlanInforViewBoarderNormal = ColorName("AirPlanInfoView.boarder.normal")
83 static let airPlanInforViewBoarderTired = ColorName("AirPlanInfoView.border.tired")
84 static let airPlanInforViewBoarderBad = ColorName("AirPlanInfoView.boarder.bad")
87 static let suppliesCellGreen = ColorName("SuppliesCell.greenColor")
88 static let suppliesCellYellow = ColorName("SuppliesCell.yellowColor")
89 static let suppliesCellOrange = ColorName("SuppliesCell.orangeColor")
90 static let suppliesCellRedColor = ColorName("SuppliesCell.redColor")
91 static let suppliesCellBorder = ColorName("SuppliesCell.borderColor")
92 static let suppliesCellBackground = ColorName("SuppliesCell.backgroundColor")
94 // for SlotItemLevelView
95 static let slotItemLevelViewLevel = ColorName("SlotItemLevelView.levelColor")
96 static let slotItemLevelViewLowAirLevel = ColorName("SlotItemLevelView.airLevel.low")
97 static let slotItemLevelViewHighAirLevel = ColorName("SlotItemLevelView.airLevel.high")
98 static let slotItemLevelViewLowAirLevelShadow = ColorName("SlotItemLevelView.airLevel.low.shadow")
99 static let slotItemLevelViewHighAirLevelShadow = ColorName("SlotItemLevelView.airLevel.high.shadow")
104 subscript(named: ColorName) -> NSColor { get }
108 struct ColorSetManager {
110 static var current: ColorSet {
112 switch AppearanceMode.current {
114 case .normal: return BaseColorSet.shared
116 case .highContrast: return HighContrastColorSet.shared
118 case .dark: return DarkModeColorSet.shared
120 case .highContrastDark: return HighContrastDarkModeColorSet.shared
125 private struct BaseColorSet: ColorSet {
127 static let shared = BaseColorSet()
129 subscript(named: ColorName) -> NSColor {
133 case .damageViewInnerSlightly: return #colorLiteral(red: 1.000, green: 0.956, blue: 0.012, alpha: 0.5)
135 case .damageViewInnerModest: return NSColor.orange.withAlphaComponent(0.5)
137 case .damageViewInnerBadly: return NSColor.red.withAlphaComponent(0.5)
139 case .damageViewBoarderSlightly: return NSColor.orange.withAlphaComponent(0.5)
141 case .damageViewBoarderModest: return NSColor.orange.withAlphaComponent(0.9)
143 case .damageViewBoarderBadly: return NSColor.red.withAlphaComponent(0.9)
146 case .airPlanInforViewNormal: return .clear
148 case .airPlanInforViewTired: return #colorLiteral(red: 1, green: 0.7233425379, blue: 0.1258574128, alpha: 0.8239436619)
150 case .airPlanInforViewBad: return #colorLiteral(red: 0.7320367694, green: 0.07731548697, blue: 0.06799335033, alpha: 1)
152 case .airPlanInforViewBoarderNormal: return .clear
154 case .airPlanInforViewBoarderTired: return #colorLiteral(red: 0.458858192, green: 0.3335277438, blue: 0.07979661971, alpha: 1)
156 case .airPlanInforViewBoarderBad: return #colorLiteral(red: 0.5462518334, green: 0.04599834234, blue: 0.04913448542, alpha: 1)
159 case .suppliesCellGreen: return NSColor(calibratedWhite: 0.39, alpha: 1.0)
161 case .suppliesCellYellow: return NSColor(calibratedWhite: 0.55, alpha: 1.0)
163 case .suppliesCellOrange: return NSColor(calibratedWhite: 0.7, alpha: 1.0)
165 case .suppliesCellRedColor: return NSColor(calibratedWhite: 0.79, alpha: 1.0)
167 case .suppliesCellBorder: return .gridColor
169 case .suppliesCellBackground: return .controlColor
172 case .slotItemLevelViewLevel: return #colorLiteral(red: 0.135, green: 0.522, blue: 0.619, alpha: 1)
174 case .slotItemLevelViewLowAirLevel: return #colorLiteral(red: 0.257, green: 0.523, blue: 0.643, alpha: 1)
176 case .slotItemLevelViewHighAirLevel: return #colorLiteral(red: 0.784, green: 0.549, blue: 0.000, alpha: 1)
178 case .slotItemLevelViewLowAirLevelShadow: return #colorLiteral(red: 0.095, green: 0.364, blue: 0.917, alpha: 1)
180 case .slotItemLevelViewHighAirLevelShadow: return .yellow
182 default: return .clear
189 private protocol SpecialColorSet: ColorSet {
191 func color(named: ColorName) -> NSColor?
194 private extension SpecialColorSet {
196 subscript(named: ColorName) -> NSColor {
198 return color(named: named) ?? BaseColorSet.shared[named]
203 private struct HighContrastColorSet: SpecialColorSet {
205 static let shared = HighContrastColorSet()
207 func color(named: ColorName) -> NSColor? {
211 case .damageViewBoarderSlightly: return .red
213 case .damageViewBoarderModest: return .red
215 case .damageViewBoarderBadly: return .red
222 private struct DarkModeColorSet: SpecialColorSet {
224 static let shared = DarkModeColorSet()
226 func color(named: ColorName) -> NSColor? {
235 private struct HighContrastDarkModeColorSet: SpecialColorSet {
237 static let shared = HighContrastDarkModeColorSet()
239 func color(named: ColorName) -> NSColor? {