You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // TextDocument.swift // lottie-swift // // Created by Brandon Withrow on 1/9/19. //
import Foundation
// MARK: - TextJustification
enum TextJustification: Int, Codable { case left case right case center }
// MARK: - TextDocument
final class TextDocument: Codable, DictionaryInitializable, AnyInitializable {
// MARK: Lifecycle
init(dictionary: [String: Any]) throws { text = try dictionary.value(for: CodingKeys.text) fontSize = try dictionary.value(for: CodingKeys.fontSize) fontFamily = try dictionary.value(for: CodingKeys.fontFamily) let justificationValue: Int = try dictionary.value(for: CodingKeys.justification) guard let justification = TextJustification(rawValue: justificationValue) else { throw InitializableError.invalidInput } self.justification = justification tracking = try dictionary.value(for: CodingKeys.tracking) lineHeight = try dictionary.value(for: CodingKeys.lineHeight) baseline = try dictionary.value(for: CodingKeys.baseline) if let fillColorRawValue = dictionary[CodingKeys.fillColorData.rawValue] { fillColorData = try? Color(value: fillColorRawValue) } else { fillColorData = nil } if let strokeColorRawValue = dictionary[CodingKeys.strokeColorData.rawValue] { strokeColorData = try? Color(value: strokeColorRawValue) } else { strokeColorData = nil } strokeWidth = try? dictionary.value(for: CodingKeys.strokeWidth) strokeOverFill = try? dictionary.value(for: CodingKeys.strokeOverFill) if let textFramePositionRawValue = dictionary[CodingKeys.textFramePosition.rawValue] { textFramePosition = try? Vector3D(value: textFramePositionRawValue) } else { textFramePosition = nil } if let textFrameSizeRawValue = dictionary[CodingKeys.textFrameSize.rawValue] { textFrameSize = try? Vector3D(value: textFrameSizeRawValue) } else { textFrameSize = nil } }
convenience init(value: Any) throws { guard let dictionary = value as? [String: Any] else { throw InitializableError.invalidInput } try self.init(dictionary: dictionary) }
// MARK: Internal
/// The Text let text: String
/// The Font size let fontSize: Double
/// The Font Family let fontFamily: String
/// Justification let justification: TextJustification
/// Tracking let tracking: Int
/// Line Height let lineHeight: Double
/// Baseline let baseline: Double?
/// Fill Color data let fillColorData: Color?
/// Scroke Color data let strokeColorData: Color?
/// Stroke Width let strokeWidth: Double?
/// Stroke Over Fill let strokeOverFill: Bool?
let textFramePosition: Vector3D?
let textFrameSize: Vector3D?
// MARK: Private
private enum CodingKeys: String, CodingKey { case text = "t" case fontSize = "s" case fontFamily = "f" case justification = "j" case tracking = "tr" case lineHeight = "lh" case baseline = "ls" case fillColorData = "fc" case strokeColorData = "sc" case strokeWidth = "sw" case strokeOverFill = "of" case textFramePosition = "ps" case textFrameSize = "sz" } }
|