You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.7 KiB
36 lines
1.7 KiB
import SwiftUI
|
|
import AppKit
|
|
|
|
/// Farbwelt von Mawari: Diensttafeln aus Holz (Hinoki), immergrünes Tokiwa als
|
|
/// Markenfarbe, Kastanie (Kuri) für die Schulungsaufgaben. Hell ist Standard,
|
|
/// dunkel wird unterstützt. Siehe design/README.md.
|
|
enum Theme {
|
|
static let tokiwa = adaptive(light: 0x2F6B4F, dark: 0x6DBB93) // Marke, Diener-Bereich
|
|
static let kuri = adaptive(light: 0x7A5230, dark: 0xD0A07A) // Schulungsbereich
|
|
static let tokiwaSoft = adaptive(light: 0xE4EFE8, dark: 0x1F2D26)
|
|
static let kuriSoft = adaptive(light: 0xF2E9DF, dark: 0x2E2620)
|
|
static let kohaku = adaptive(light: 0xB45309, dark: 0xF0A35A) // "nie"
|
|
static let kohakuSoft = adaptive(light: 0xFDF1E3, dark: 0x3A2A18)
|
|
static let line = adaptive(light: 0xE4E0D8, dark: 0x30332F)
|
|
static let muted = adaptive(light: 0x7A746B, dark: 0x9A958C)
|
|
static let faint = adaptive(light: 0xC6C0B6, dark: 0x4C4F4A)
|
|
static let bengara = adaptive(light: 0xB5452B, dark: 0xE8775D) // Warnungen
|
|
|
|
static func color(for group: TaskGroup) -> Color { group == .diener ? tokiwa : kuri }
|
|
static func soft(for group: TaskGroup) -> Color { group == .diener ? tokiwaSoft : kuriSoft }
|
|
|
|
static func adaptive(light: UInt32, dark: UInt32) -> Color {
|
|
Color(nsColor: NSColor(name: nil) { appearance in
|
|
let isDark = appearance.bestMatch(from: [.darkAqua, .aqua]) == .darkAqua
|
|
return NSColor(hex: isDark ? dark : light)
|
|
})
|
|
}
|
|
}
|
|
|
|
extension NSColor {
|
|
convenience init(hex: UInt32) {
|
|
self.init(srgbRed: CGFloat((hex >> 16) & 0xFF) / 255, green: CGFloat((hex >> 8) & 0xFF) / 255,
|
|
blue: CGFloat(hex & 0xFF) / 255, alpha: 1)
|
|
}
|
|
}
|