77// Status: WIP
88
99package 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
49101package protocol LeafViewLayout {
0 commit comments