Skip to content

Commit 5177eef

Browse files
committed
size
1 parent ab0c50c commit 5177eef

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

SwiftDraw/CommandLine+Process.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,18 @@ public extension CommandLine {
9797
case .jpeg:
9898
return try image
9999
.inset(makeImageInsets(for: config.insets))
100-
.jpegData(size: config.size.cgValue, scale: config.scale.cgValue)
100+
.size(config.size.cgValue)
101+
.jpegData(scale: config.scale.cgValue)
101102
case .pdf:
102103
return try image
103104
.inset(makeImageInsets(for: config.insets))
104-
.pdfData(size: config.size.cgValue)
105+
.size(config.size.cgValue)
106+
.pdfData()
105107
case .png:
106108
return try image
107109
.inset(makeImageInsets(for: config.insets))
108-
.pngData(size: config.size.cgValue, scale: config.scale.cgValue)
110+
.size(config.size.cgValue)
111+
.pngData(scale: config.scale.cgValue)
109112
case .swift, .sfsymbol:
110113
throw Error.unsupported
111114
}
@@ -133,6 +136,12 @@ public extension CommandLine {
133136
}
134137

135138
private extension SVG {
139+
140+
func size(_ s: CGSize?) -> SVG {
141+
guard let s else { return self }
142+
return size(s)
143+
}
144+
136145
func inset(_ insets: Insets) -> SVG {
137146
expand(top: -insets.top, left: -insets.left, bottom: -insets.bottom, right: -insets.right)
138147
}

SwiftDraw/SVG.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,18 @@ public struct SVG: Hashable {
8080

8181
extension SVG {
8282

83+
public func size(_ s: CGSize) -> SVG {
84+
guard size != s else { return self }
85+
86+
let sx = s.width / size.width
87+
let sy = s.height / size.height
88+
89+
var copy = self
90+
copy.commands.insert(.scale(sx: sx, sy: sy), at: 0)
91+
copy.size = s
92+
return copy
93+
}
94+
8395
public func scale(_ factor: CGFloat) -> SVG {
8496
scale(x: factor, y: factor)
8597
}
@@ -119,6 +131,10 @@ extension SVG {
119131

120132
extension SVG {
121133

134+
public mutating func sized(_ s: CGSize) {
135+
self = size(s)
136+
}
137+
122138
public mutating func scaled(_ factor: CGFloat) {
123139
self = scale(factor)
124140
}

SwiftDrawTests/SVGTests.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,17 @@ final class SVGTests: XCTestCase {
8686
}
8787
#endif
8888

89+
func testSize() {
90+
let image = SVG.makeLines()
91+
92+
XCTAssertEqual(image.size, CGSize(width: 100, height: 100))
93+
XCTAssertEqual(image.size(CGSize(width: 200, height: 200)).size, CGSize(width: 200, height: 200))
94+
95+
var copy = image
96+
copy.sized(CGSize(width: 20, height: 20))
97+
XCTAssertEqual(copy.size, CGSize(width: 20, height: 20))
98+
}
99+
89100
func testScale() {
90101
let image = SVG.makeLines()
91102

0 commit comments

Comments
 (0)