Add right-click Copy Image to diagrams
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#if os(macOS)
|
||||
import SwiftUI
|
||||
|
||||
#if os(macOS)
|
||||
@MainActor
|
||||
func renderDiagram(html: Bool) -> Int32 {
|
||||
FontSize.stored = false
|
||||
@@ -17,18 +17,7 @@ func renderDiagram(html: Bool) -> Int32 {
|
||||
FileHandle.standardOutput.write(Data(diagramHTML(layout).utf8))
|
||||
return 0
|
||||
}
|
||||
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 png: Data?
|
||||
NSAppearance(named: .aqua)!.performAsCurrentDrawingAppearance {
|
||||
png = renderer.cgImage.flatMap { NSBitmapImageRep(cgImage: $0).representation(using: .png, properties: [:]) }
|
||||
}
|
||||
guard let png else {
|
||||
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
|
||||
}
|
||||
@@ -36,3 +25,25 @@ func renderDiagram(html: Bool) -> Int32 {
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user