// Copyright (C) 2024 Rubén Beltrán del Río // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see https://map.tranquil.systems. import AppKit import Sparkle import SwiftUI @main struct MapApp: App { private let updaterController: SPUStandardUpdaterController = SPUStandardUpdaterController( startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil) @AppStorage("appearanceStyle") private var appearanceStyle: String = UserPreferences.Defaults .appearanceStyle init() { // Apply appearance setting at app launch applyAppearanceStyle() } var body: some Scene { DocumentGroup(newDocument: MapDocument(text: nil)) { file in MapEditor(document: file.$document) .focusedSceneValue(\.document, file.$document) .focusedSceneValue(\.fileURL, file.fileURL) } .windowToolbarStyle(.unifiedCompact) .commands { MapCommands() UpdateCommands(updaterController: updaterController) } Settings { PreferencesWindow() } .onChange(of: appearanceStyle) { _, newValue in applyAppearanceStyle() } } private func applyAppearanceStyle() { guard let style = AppearanceStyle(rawValue: appearanceStyle) else { return } DispatchQueue.main.async { switch style { case .system: NSApp.appearance = nil case .light: NSApp.appearance = NSAppearance(named: .aqua) case .dark: NSApp.appearance = NSAppearance(named: .darkAqua) } } } }