Skip to content

Commit 1bf9d8a

Browse files
committed
Implement RendererLeafView.makeLeafView(view:inputs:)
1 parent 55dfa9f commit 1bf9d8a

File tree

1 file changed

+65
-13
lines changed

1 file changed

+65
-13
lines changed

Sources/OpenSwiftUICore/Render/RendererLeafView.swift

Lines changed: 65 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
// Status: WIP
88

99
package import Foundation
10-
import OpenAttributeGraphShims
10+
package import OpenAttributeGraphShims
1111

1212
// MARK: - RendererLeafView [TODO]
1313

@@ -26,24 +26,76 @@ extension RendererLeafView {
2626
}
2727

2828
package static func makeLeafView(view: _GraphValue<Self>, inputs: _ViewInputs) -> _ViewOutputs {
29-
// TODO
3029
var outputs = _ViewOutputs()
31-
// FIXME
32-
outputs.preferences.displayList = Attribute(
33-
LeafDisplayList(
34-
identity: .init(),
35-
view: view.value,
36-
position: inputs.animatedPosition(),
37-
size: inputs.animatedCGSize(),
38-
containerPosition: inputs.containerPosition,
39-
options: .defaultValue,
40-
contentSeed: .init()
30+
31+
if inputs.preferences.requiresDisplayList {
32+
let identity = DisplayList.Identity()
33+
inputs.pushIdentity(identity)
34+
35+
outputs.preferences.displayList = Attribute(
36+
LeafDisplayList(
37+
identity: identity,
38+
view: view.value,
39+
position: inputs.animatedPosition(),
40+
size: inputs.animatedCGSize(),
41+
containerPosition: inputs.containerPosition,
42+
options: inputs[DisplayList.Options.self],
43+
contentSeed: DisplayList.Seed()
44+
)
4145
)
42-
)
46+
}
47+
48+
if inputs.preferences.requiresViewResponders {
49+
outputs.preferences.viewResponders = Attribute(
50+
LeafResponderFilter(
51+
data: view.value,
52+
size: inputs.animatedSize(),
53+
position: inputs.animatedPosition(),
54+
transform: inputs.transform
55+
)
56+
)
57+
}
58+
59+
// TODO
60+
// outputs.makeContentPathPreferenceWriter(
61+
// inputs: inputs,
62+
// contentResponder: view.value
63+
// )
64+
4365
return outputs
4466
}
4567
}
4668

69+
package struct LeafResponderFilter<Data>: StatefulRule {
70+
@Attribute private var data: Data
71+
@Attribute private var size: ViewSize
72+
@Attribute private var position: CGPoint
73+
@Attribute private var transform: ViewTransform
74+
package private(set) lazy var responder = LeafViewResponder<Data>()
75+
76+
package init(
77+
data: Attribute<Data>,
78+
size: Attribute<ViewSize>,
79+
position: Attribute<CGPoint>,
80+
transform: Attribute<ViewTransform>
81+
) {
82+
self._data = data
83+
self._size = size
84+
self._position = position
85+
self._transform = transform
86+
}
87+
88+
package typealias Value = [ViewResponder]
89+
90+
package func updateValue() {
91+
_openSwiftUIUnimplementedWarning()
92+
}
93+
}
94+
95+
package final class LeafViewResponder<Data>: ViewResponder {
96+
// TODO
97+
}
98+
4799
// MARK: - LeafViewLayout
48100

49101
package protocol LeafViewLayout {

0 commit comments

Comments
 (0)