33
44import SwiftUI
55
6+ import FactoryKit
7+
8+ import BarcBarcodes
9+
610struct RenderedCodeShape : Shape {
7- private let renderedCode : RenderedCode
8- public init ( renderedCode : RenderedCode ) {
9- self . renderedCode = renderedCode
11+ private let value : CodeValue
12+ public init ( value : CodeValue ) {
13+ self . value = value
1014 }
1115
1216 nonisolated func path( in rect: CGRect ) -> Path {
17+ let renderCache = Container . shared. renderCache ( )
18+ let renderedCode = renderCache. renderedCode ( for: value, size: rect. size)
1319 let aspectRatioRect = switch renderedCode. kineNoo {
1420 case . linear:
1521 rect
@@ -29,3 +35,55 @@ struct RenderedCodeShape: Shape {
2935 }
3036 }
3137}
38+
39+ /*
40+ struct RenderedCodeShape: Shape {
41+ private let renderer: CodeValueRenderer
42+ public init(value: CodeValue) {
43+ self.renderer = CodeValueRenderer(value: value)
44+ }
45+
46+ nonisolated func path(in rect: CGRect) -> Path {
47+ let renderedCode = self.renderedCode(in: rect.size)
48+ let aspectRatioRect = switch renderedCode.kineNoo {
49+ case .linear:
50+ rect
51+ case .ratio(let codeRatio):
52+ CGRect(origin: .zero, size: CGSize(width: codeRatio, height: 1))
53+ .fitting(rect: rect)
54+ }
55+
56+ let scaledCode = renderedCode
57+ .scaled(to: aspectRatioRect.size)
58+ .translated(to: aspectRatioRect.origin)
59+
60+ return Path { path in
61+ for i in 0..<scaledCode.rects.count {
62+ path.addRect(scaledCode.rects[i])
63+ }
64+ }
65+ }
66+
67+ @State private var cachedRenderedCode: (CGSize, RenderedCode)?
68+ private func renderedCode(in size: CGSize) -> RenderedCode {
69+ print("CACHE exists? \(cachedRenderedCode != nil), checking \(size)")
70+ if let cachedRenderedCode, cachedRenderedCode.0 == size {
71+ print("CACHE hit 🟢")
72+ return cachedRenderedCode.1
73+ }
74+
75+ print("CACHE miss 🔴")
76+ print("CACHE is caching size: \(size)")
77+ let renderedCode = renderer.renderedCode(in: size.width / size.height)
78+ cachedRenderedCode = (size, renderedCode)
79+ return renderedCode
80+ }
81+ }
82+ */
83+
84+ import PDF417
85+ #Preview( traits: . fixedLayout( width: 517 , height: 244 ) ) {
86+ try ! RenderedCodeShape (
87+ value: . pdf417( PDF417CodeValue ( dataCodewords: CodewordsEncoder ( ) . dataCodewords ( for: " 1234567890123456 " ) ) )
88+ )
89+ }
0 commit comments