Skip to content

Commit 2857dd4

Browse files
committed
Update ViewInputs API
1 parent eb5f4a8 commit 2857dd4

File tree

3 files changed

+110
-15
lines changed

3 files changed

+110
-15
lines changed

Sources/OpenSwiftUICore/Data/Environment/CachedEnvironment.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@ package struct CachedEnvironment {
5858
}
5959

6060
// func resolvedForegroundStyle() {}
61+
62+
func resolvedShapeStyles(
63+
for inputs: _ViewInputs,
64+
role: ShapeRole,
65+
mode: Attribute<_ShapeStyle_ResolverMode>?
66+
) -> Attribute<_ShapeStyle_Pack> {
67+
preconditionFailure("TODO")
68+
}
6169
}
6270

6371
extension CachedEnvironment {

Sources/OpenSwiftUICore/Layout/View/ViewTransform.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
// ID: 1CC2FE016A82CF91549A64E942CE8ED4 (SwiftUICore)
99

1010
package import Foundation
11+
#if !canImport(Darwin)
1112
package import CoreGraphicsShims
13+
#endif
1214

1315
@_spi(ForOpenSwiftUIOnly)
1416
public struct ViewTransform: Equatable, CustomStringConvertible {

Sources/OpenSwiftUICore/View/Input/ViewInputs.swift

Lines changed: 100 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22
// ViewInputs.swift
33
// OpenSwiftUICore
44
//
5-
// Audited for iOS 18.0
5+
// ID: C38EF38637B6130AEFD462CBD5EAC727 (SwiftUICore)
66
// Status: Complete
77

88
#if !canImport(Darwin)
99
package import Foundation
1010
#endif
1111
package import OpenGraphShims
1212

13+
// MARK: - ViewInputs [6.0.87]
14+
1315
package typealias ViewPhase = _GraphInputs.Phase
1416

1517
package protocol ViewInput: GraphInput {}
@@ -50,7 +52,10 @@ public struct _ViewInputs {
5052

5153
package var viewPhase: Attribute<ViewPhase> {
5254
get { base.phase }
53-
set { base.phase = newValue }
55+
set {
56+
base.phase = newValue
57+
base.changedDebugProperties.formUnion(.phase)
58+
}
5459
}
5560

5661
package var transaction: Attribute<Transaction> {
@@ -227,28 +232,108 @@ extension _ViewInputs {
227232
}
228233

229234
@inline(__always)
230-
func detachedEnvironmentInputs() -> Self {
235+
func detachedEnvironmentInputs() -> _ViewInputs {
231236
var newInputs = self
232237
newInputs.detachEnvironmentInputs()
233238
return newInputs
234239
}
235240
}
236241

237-
// FIXME
238-
@available(*, deprecated, message: "TO BE REMOVED")
242+
// MARK: - DynamicStackOrientation [6.0.87]
243+
244+
package struct DynamicStackOrientation: ViewInput {
245+
package static let defaultValue: OptionalAttribute<Axis?> = .init()
246+
}
247+
248+
// MARK: - ViewInputs without Geometry Dependencies [6.4.41]
249+
239250
extension _ViewInputs {
240-
mutating func append<Input: ViewInput, Value>(_ value: Value, to type: Input.Type) where Input.Value == [Value] {
241-
var values = base[type]
242-
values.append(value)
243-
base[type] = values
251+
package var withoutGeometryDependencies: _ViewInputs {
252+
let viewGraph = ViewGraph.current
253+
var inputs = self
254+
inputs.position = viewGraph.$zeroPoint
255+
inputs.transform = viewGraph.intern(ViewTransform(), id: .defaultValue)
256+
inputs.containerPosition = viewGraph.$zeroPoint
257+
inputs.size = viewGraph.intern(ViewSize.zero, id: .defaultValue)
258+
inputs.requestsLayoutComputer = false
259+
inputs.needsGeometry = false
260+
inputs.preferences.remove(DisplayList.Key.self)
261+
inputs.preferences.remove(ViewRespondersKey.self)
262+
return inputs
244263
}
245264

246-
mutating func popLast<Input: ViewInput, Value>(_ type: Input.Type) -> Value? where Input.Value == [Value] {
247-
var values = base[type]
248-
guard let value = values.popLast() else {
249-
return nil
265+
package init(withoutGeometry base: _GraphInputs) {
266+
let base = base
267+
let viewGraph = ViewGraph.current
268+
let position = viewGraph.$zeroPoint
269+
let size = viewGraph.intern(ViewSize.zero, id: .defaultValue)
270+
let transform = viewGraph.intern(ViewTransform(), id: .defaultValue)
271+
let containerPosition = viewGraph.$zeroPoint
272+
let hostKeys = Attribute(value: PreferenceKeys())
273+
274+
self.base = base
275+
self.preferences = PreferencesInputs(hostKeys: hostKeys)
276+
self.transform = transform
277+
self.position = position
278+
self.containerPosition = containerPosition
279+
self.size = size
280+
self.safeAreaInsets = .init()
281+
self.scrollableContainerSize = .init()
282+
}
283+
}
284+
285+
extension _ViewListInputs {
286+
package var withoutGeometryDependencies: _ViewInputs {
287+
let inputs = _ViewInputs(withoutGeometry: base)
288+
return inputs.withoutGeometryDependencies
289+
}
290+
}
291+
292+
// MARK: ResetDeltaModifier [6.4.41]
293+
294+
private struct ResetDeltaModifier: MultiViewModifier, PrimitiveViewModifier {
295+
var delta: UInt32
296+
297+
nonisolated static func _makeView(
298+
modifier: _GraphValue<ResetDeltaModifier>,
299+
inputs: _ViewInputs,
300+
body: @escaping (_Graph, _ViewInputs) -> _ViewOutputs
301+
) -> _ViewOutputs {
302+
var inputs = inputs
303+
let phase = ChildPhase(base: inputs.base.phase, delta: modifier.value.unsafeOffset(at: 0, as: UInt32.self))
304+
inputs.viewPhase = Attribute(phase)
305+
return body(_Graph(), inputs)
306+
}
307+
308+
struct ChildPhase: Rule {
309+
@Attribute var base: _GraphInputs.Phase
310+
@Attribute var delta: UInt32
311+
312+
var value: _GraphInputs.Phase {
313+
var phase = base
314+
phase.resetSeed += delta
315+
return phase
250316
}
251-
base[type] = values
252-
return value
317+
}
318+
}
319+
320+
extension View {
321+
package func reset(delta: UInt32) -> some View {
322+
modifier(ResetDeltaModifier(delta: delta))
323+
}
324+
}
325+
326+
// MARK: Resolve Shape Style [6.4.41]
327+
328+
extension _ViewInputs {
329+
package func resolvedShapeStyles(
330+
role: ShapeRole,
331+
mode: Attribute<_ShapeStyle_ResolverMode>? = nil
332+
) -> Attribute<_ShapeStyle_Pack> {
333+
base.cachedEnvironment.wrappedValue.resolvedShapeStyles(
334+
for: self,
335+
role: role,
336+
mode: mode
337+
)
253338
}
254339
}

0 commit comments

Comments
 (0)