Files
byre/mac/Sources/Byre/Render.swift
T

50 lines
1.5 KiB
Swift
Raw Normal View History

import SwiftUI
2026-10-23 09:08:21 -07:00
#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
}
2026-10-23 09:08:21 -07:00
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
2026-10-23 09:08:21 -07:00
var image: CGImage?
#if os(macOS)
NSAppearance(named: .aqua)!.performAsCurrentDrawingAppearance {
2026-10-23 09:08:21 -07:00
image = renderer.cgImage
}
2026-10-23 09:08:21 -07:00
#else
UITraitCollection(userInterfaceStyle: .light).performAsCurrent {
image = renderer.cgImage
}
2026-10-23 09:08:21 -07:00
#endif
return image
}