|
|
|
@ -500,8 +500,14 @@ public class ImageEditorCanvasView: UIView {
|
|
|
|
|
// using the image width as reference.
|
|
|
|
|
let fontSize = item.font.pointSize * imageFrame.size.width / item.fontReferenceImageWidth
|
|
|
|
|
|
|
|
|
|
let text = item.text.filterForDisplay ?? ""
|
|
|
|
|
let attributedString = NSAttributedString(string: text,
|
|
|
|
|
attributes: [
|
|
|
|
|
NSAttributedStringKey.font: item.font.withSize(fontSize),
|
|
|
|
|
NSAttributedStringKey.foregroundColor: item.color.color
|
|
|
|
|
])
|
|
|
|
|
let layer = EditorTextLayer(itemId: item.itemId)
|
|
|
|
|
layer.string = item.text
|
|
|
|
|
layer.string = attributedString
|
|
|
|
|
layer.foregroundColor = item.color.cgColor
|
|
|
|
|
layer.font = CGFont(item.font.fontName as CFString)
|
|
|
|
|
layer.fontSize = fontSize
|
|
|
|
@ -523,21 +529,18 @@ public class ImageEditorCanvasView: UIView {
|
|
|
|
|
let maxSize = CGSize(width: maxWidth, height: CGFloat.greatestFiniteMagnitude)
|
|
|
|
|
// TODO: Is there a more accurate way to measure text in a CATextLayer?
|
|
|
|
|
// CoreText?
|
|
|
|
|
let textBounds = (item.text as NSString).boundingRect(with: maxSize,
|
|
|
|
|
options: [
|
|
|
|
|
.usesLineFragmentOrigin,
|
|
|
|
|
.usesFontLeading
|
|
|
|
|
let textBounds = attributedString.boundingRect(with: maxSize,
|
|
|
|
|
options: [
|
|
|
|
|
.usesLineFragmentOrigin,
|
|
|
|
|
.usesFontLeading
|
|
|
|
|
],
|
|
|
|
|
attributes: [
|
|
|
|
|
.font: item.font.withSize(fontSize)
|
|
|
|
|
],
|
|
|
|
|
context: nil)
|
|
|
|
|
context: nil)
|
|
|
|
|
// The text item's center is specified in "image unit" coordinates, but
|
|
|
|
|
// needs to be rendered in "canvas" coordinates. The imageFrame
|
|
|
|
|
// is the bounds of the image specified in "canvas" coordinates,
|
|
|
|
|
// so to transform we can simply convert from image frame units.
|
|
|
|
|
let centerInCanvas = item.unitCenter.fromUnitCoordinates(viewBounds: imageFrame)
|
|
|
|
|
let layerSize = CGSizeCeil(textBounds.size)
|
|
|
|
|
let layerSize = textBounds.size.ceil
|
|
|
|
|
layer.frame = CGRect(origin: CGPoint(x: centerInCanvas.x - layerSize.width * 0.5,
|
|
|
|
|
y: centerInCanvas.y - layerSize.height * 0.5),
|
|
|
|
|
size: layerSize)
|
|
|
|
|