Files
ggbond268--mactools/Plugins/Calendar/Sources/CalendarAppearancePreference.swift
wehub-resource-sync 1d1286fadb
Build / Build and test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:18:38 +08:00

49 lines
1.2 KiB
Swift

import AppKit
enum CalendarAppearancePreference: String {
case system
case dark
case light
private static let userDefaultsKey = "app.appearancePreference"
@MainActor
func apply(to view: NSView?) {
view?.appearance = nsAppearance
}
@MainActor
func apply(to window: NSWindow?) {
window?.appearance = nsAppearance
}
@MainActor
func apply(to popover: NSPopover) {
apply(to: popover.contentViewController?.view)
apply(to: popover.contentViewController?.view.window)
}
@MainActor
private var nsAppearance: NSAppearance? {
switch self {
case .system:
return nil
case .dark:
return NSAppearance(named: .darkAqua)
case .light:
return NSAppearance(named: .aqua)
}
}
static func stored(in userDefaults: UserDefaults = .standard) -> CalendarAppearancePreference {
guard
let rawValue = userDefaults.string(forKey: userDefaultsKey),
let preference = CalendarAppearancePreference(rawValue: rawValue)
else {
return .system
}
return preference
}
}