From 36f530cf393a99c337d3062fdf28849f24e9cee8 Mon Sep 17 00:00:00 2001 From: Simon Whitty Date: Sun, 22 Oct 2023 09:18:04 +1100 Subject: [PATCH] Flip CGImage --- Samples.bundle/base64.svg | 7 +++++++ Samples.bundle/shapes.svg | 2 ++ SwiftDraw/Renderer.CGText.swift | 4 ++++ SwiftDraw/Renderer.CoreGraphics.swift | 9 +++++++-- 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 Samples.bundle/base64.svg diff --git a/Samples.bundle/base64.svg b/Samples.bundle/base64.svg new file mode 100644 index 0000000..69e2958 --- /dev/null +++ b/Samples.bundle/base64.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/Samples.bundle/shapes.svg b/Samples.bundle/shapes.svg index 5f78f35..5125e25 100644 --- a/Samples.bundle/shapes.svg +++ b/Samples.bundle/shapes.svg @@ -93,4 +93,6 @@ + + \ No newline at end of file diff --git a/SwiftDraw/Renderer.CGText.swift b/SwiftDraw/Renderer.CGText.swift index 623995a..209f83b 100644 --- a/SwiftDraw/Renderer.CGText.swift +++ b/SwiftDraw/Renderer.CGText.swift @@ -557,7 +557,11 @@ public final class CGTextRenderer: Renderer { } func draw(image: LayerTree.Image) { + lines.append("ctx.saveGState()") + lines.append("ctx.translateBy(x: 0, y: image.height)") + lines.append("ctx.scaleBy(x: 1, y: -1)") lines.append("ctx.draw(image, in: CGRect(x: 0, y: 0, width: image.width, height: image.height)") + lines.append("ctx.restoreGState()") } func draw(linear gradient: LayerTree.Gradient, from start: String, to end: String) { diff --git a/SwiftDraw/Renderer.CoreGraphics.swift b/SwiftDraw/Renderer.CoreGraphics.swift index e186d0c..e09ca19 100644 --- a/SwiftDraw/Renderer.CoreGraphics.swift +++ b/SwiftDraw/Renderer.CoreGraphics.swift @@ -77,6 +77,7 @@ final class CGTransformingPattern: Equatable { } struct CGProvider: RendererTypeProvider { + typealias Types = CGTypes func createFloat(from float: LayerTree.Float) -> CGFloat { @@ -412,8 +413,12 @@ struct CGRenderer: Renderer { } func draw(image: CGImage) { - let rect = CGRect(x: 0, y: 0, width: image.width, height: image.height) - ctx.draw(image, in: rect) + let rect = CGRect(x: 0, y: 0, width: image.width, height: image.height) + pushState() + translate(tx: 0, ty: rect.height) + scale(sx: 1, sy: -1) + ctx.draw(image, in: rect) + popState() } func draw(linear gradient: CGGradient, from start: CGPoint, to end: CGPoint) {