1
1
mirror of https://github.com/exyte/Macaw.git synced 2024-10-26 04:49:57 +03:00

Perform requested changes

This commit is contained in:
Alisa Mylnikova 2019-02-07 13:59:40 +07:00
parent 0d2bd69d75
commit c966b85f02
2 changed files with 12 additions and 10 deletions

View File

@ -186,7 +186,7 @@ class ShapeRenderer: NodeRenderer {
patternBounds = pattern.bounds.applying(boundsTranform)
}
let tileImage = renderer.renderToImage(bounds: patternBounds, inset: 0)
ctx!.clip()
ctx?.clip()
ctx?.draw(tileImage.cgImage!, in: patternBounds.toCG(), byTiling: true)
}

View File

@ -92,6 +92,7 @@ open class SVGParser {
fileprivate var defMasks = [String: UserSpaceNode]()
fileprivate var defClip = [String: UserSpaceLocus]()
fileprivate var defEffects = [String: Effect]()
fileprivate var defPatterns = [String: UserSpacePattern]()
fileprivate var styles = CSSParser()
@ -154,8 +155,10 @@ open class SVGParser {
}
if let id = element.allAttributes["id"]?.text {
switch element.name {
case "linearGradient", "radialGradient", "pattern", "fill":
case "linearGradient", "radialGradient", "fill":
defFills[id] = try parseFill(node)
case "pattern":
defPatterns[id] = try parsePattern(node)
case "mask":
defMasks[id] = try parseMask(node)
case "filter":
@ -333,14 +336,12 @@ open class SVGParser {
return parseLinearGradient(fill, groupStyle: style)
case "radialGradient":
return parseRadialGradient(fill, groupStyle: style)
case "pattern":
return try parsePattern(fill, groupStyle: style)
default:
return .none
}
}
fileprivate func parsePattern(_ pattern: XMLIndexer, groupStyle: [String: String] = [:]) throws -> Fill? {
fileprivate func parsePattern(_ pattern: XMLIndexer) throws -> UserSpacePattern? {
guard let element = pattern.element else {
return .none
}
@ -348,7 +349,7 @@ open class SVGParser {
var parentPattern: UserSpacePattern?
if let link = element.allAttributes["xlink:href"]?.text.replacingOccurrences(of: " ", with: ""), link.hasPrefix("#") {
let id = link.replacingOccurrences(of: "#", with: "")
parentPattern = defFills[id] as? UserSpacePattern
parentPattern = defPatterns[id]
}
let x = getDoubleValue(element, attribute: "x") ?? parentPattern?.bounds.x ?? 0
@ -625,11 +626,12 @@ open class SVGParser {
return Color.black.with(a: opacity)
}
if let colorId = parseIdFromUrl(fillColor) {
let fill = defFills[colorId]
if let pattern = fill as? UserSpacePattern {
if let fill = defFills[colorId] {
return fill
}
if let pattern = defPatterns[colorId] {
return getPatternFill(pattern: pattern, locus: locus)
}
return fill
}
if fillColor == "currentColor", let currentColor = groupStyle["color"] {
fillColor = currentColor
@ -1819,7 +1821,7 @@ fileprivate class UserSpaceNode {
}
}
fileprivate class UserSpacePattern: Fill {
fileprivate class UserSpacePattern {
public let content: Node
public let bounds: Rect