Skip to content

Commit 70064af

Browse files
committed
Add empty ViewRasterizer implementation
1 parent 83cc73c commit 70064af

File tree

2 files changed

+51
-8
lines changed

2 files changed

+51
-8
lines changed

Sources/OpenSwiftUICore/Render/DisplayList.ViewRenderer.swift

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,12 @@ extension DisplayList {
6464
}
6565
if let renderer {
6666
switch configuration.renderer {
67-
case .default:
68-
return renderer
69-
case .rasterized(let options):
70-
fatalError("Blocked by ViewRasterizer")
71-
return renderer
67+
case .default: break
68+
case let .rasterized(options):
69+
let rasterizer = renderer as! ViewRasterizer
70+
rasterizer.options = options
71+
rasterizer.renderer.platformViewMode = options.drawsPlatformViews ? .rendered(update: true) : .unsupported
72+
rasterizer.host = host
7273
}
7374
} else {
7475
switch configuration.renderer {
@@ -77,11 +78,13 @@ extension DisplayList {
7778
// TODO: ViewUpdater
7879
renderer = updater
7980
state = .updating
80-
return renderer!
81-
case .rasterized(let options):
82-
fatalError("Blocked by ViewRasterizer")
81+
case let .rasterized(options):
82+
let rasterizer = ViewRasterizer(platform: platform, host: host, rootView: rootView, options: options)
83+
renderer = rasterizer
84+
state = .rasterizing
8385
}
8486
}
87+
return renderer!
8588
}
8689

8790
package func exportedObject(rootView: AnyObject) -> AnyObject? {
@@ -115,4 +118,38 @@ extension DisplayList {
115118
renderer?.viewCacheIsEmpty ?? true
116119
}
117120
}
121+
122+
private final class ViewRasterizer: ViewRendererBase {
123+
let platform: DisplayList.ViewUpdater.Platform
124+
weak var host: ViewRendererHost?
125+
var drawingView: AnyObject?
126+
var options: _RendererConfiguration.RasterizationOptions
127+
let renderer: DisplayList.GraphicsRenderer
128+
var seed: DisplayList.Seed
129+
var lastContentsScale: CGFloat
130+
131+
init(platform: DisplayList.ViewUpdater.Platform, host: ViewRendererHost?, rootView: AnyObject, options: _RendererConfiguration.RasterizationOptions) {
132+
fatalError()
133+
}
134+
135+
var exportedObject: AnyObject? {
136+
platform.definition.getRBLayer(drawingView: drawingView!)
137+
}
138+
139+
func render(rootView: AnyObject, from list: DisplayList, time: Time, version: DisplayList.Version, maxVersion: DisplayList.Version, environment: DisplayList.ViewRenderer.Environment) -> Time {
140+
fatalError("TODO")
141+
}
142+
143+
func renderAsync(to list: DisplayList, time: Time, targetTimestamp: Time?, version: DisplayList.Version, maxVersion: DisplayList.Version) -> Time? {
144+
fatalError("TODO")
145+
}
146+
147+
func destroy(rootView: AnyObject) {
148+
fatalError("TODO")
149+
}
150+
151+
var viewCacheIsEmpty: Bool {
152+
fatalError("TODO")
153+
}
154+
}
118155
}

Sources/OpenSwiftUICore/Render/PlatformViewDefinition.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ extension DisplayList.ViewUpdater.Platform {
7272
package init(definition: PlatformViewDefinition.Type) {
7373
self.init(rawValue: UInt(bitPattern: ObjectIdentifier(definition)) | UInt(definition.system.base.rawValue))
7474
}
75+
76+
@inline(__always)
77+
var definition: PlatformViewDefinition.Type {
78+
let rawValue = self.rawValue & 0xFFFF_FFFF_FFFF_FFFC
79+
return unsafeBitCast(rawValue, to: PlatformViewDefinition.Type.self)
80+
}
7581
}
7682

7783
extension DisplayList.GraphicsRenderer {

0 commit comments

Comments
 (0)