import SwiftUI #if os(macOS) @MainActor func renderDiagram(html: Bool) -> Int32 { FontSize.stored = false let source = String(decoding: FileHandle.standardInput.readDataToEndOfFile(), as: UTF8.self) let layout: BoxLayout switch cachedBoxLayout(source) { case .success(let l): layout = l case .failure(let error): FileHandle.standardError.write(Data(error.reason.utf8)) return 1 } if html { FileHandle.standardOutput.write(Data(diagramHTML(layout).utf8)) return 0 } guard let png = diagramCGImage(layout).flatMap({ NSBitmapImageRep(cgImage: $0).representation(using: .png, properties: [:]) }) else { FileHandle.standardError.write(Data("diagram didn't render".utf8)) return 1 } FileHandle.standardOutput.write(png) return 0 } #endif @MainActor func diagramCGImage(_ layout: BoxLayout) -> CGImage? { let content = BoxCanvas(layout: layout) .frame(width: layout.size.width, height: layout.size.height) .padding(16) .background(Palette.bg) .environment(\.colorScheme, .light) let renderer = ImageRenderer(content: content) renderer.scale = 2 var image: CGImage? #if os(macOS) NSAppearance(named: .aqua)!.performAsCurrentDrawingAppearance { image = renderer.cgImage } #else UITraitCollection(userInterfaceStyle: .light).performAsCurrent { image = renderer.cgImage } #endif return image }