Files
Macaw/Source/render/ImageRenderer.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
}
}