71 lines
1.7 KiB
Swift
71 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
#if os(OSX)
|
|
import AppKit
|
|
#endif
|
|
|
|
#if os(iOS)
|
|
import UIKit
|
|
#endif
|
|
|
|
class ImageRenderer: NodeRenderer {
|
|
var image: Image
|
|
|
|
var renderedPaths: [CGPath] = [CGPath]()
|
|
|
|
override var node: Node {
|
|
return image
|
|
}
|
|
|
|
init(image: Image, view: DrawingView?, parentRenderer: GroupRenderer? = nil) {
|
|
self.image = image
|
|
super.init(node: image, view: view, parentRenderer: parentRenderer)
|
|
}
|
|
|
|
deinit {
|
|
dispose()
|
|
}
|
|
|
|
override func doAddObservers() {
|
|
super.doAddObservers()
|
|
|
|
observe(image.srcVar)
|
|
observe(image.xAlignVar)
|
|
observe(image.yAlignVar)
|
|
observe(image.aspectRatioVar)
|
|
observe(image.wVar)
|
|
observe(image.hVar)
|
|
}
|
|
|
|
override func doRender(in context: CGContext, force: Bool, opacity: Double, coloringMode: ColoringMode = .rgb) {
|
|
|
|
var mImage: MImage?
|
|
if image.src.contains("memory") {
|
|
let id = image.src.replacingOccurrences(of: "memory://", with: "")
|
|
mImage = imagesMap[id]
|
|
} else {
|
|
mImage = image.image()
|
|
}
|
|
|
|
if let mImage = mImage,
|
|
let rect = BoundsUtils.getRect(of: image, mImage: mImage) {
|
|
context.scaleBy(x: 1.0, y: -1.0)
|
|
context.translateBy(x: 0.0, y: -1.0 * rect.height)
|
|
context.setAlpha(CGFloat(opacity))
|
|
context.draw(mImage.cgImage!, in: rect)
|
|
}
|
|
}
|
|
|
|
override func doFindNodeAt(path: NodePath, ctx: CGContext) -> NodePath? {
|
|
|
|
if let mImage = MImage(named: image.src),
|
|
let rect = BoundsUtils.getRect(of: image, mImage: mImage) {
|
|
|
|
if rect.contains(path.location) {
|
|
return path
|
|
}
|
|
}
|
|
return .none
|
|
}
|
|
}
|