|
2 | 2 | // ViewInputs.swift
|
3 | 3 | // OpenSwiftUICore
|
4 | 4 | //
|
5 |
| -// Audited for iOS 18.0 |
| 5 | +// ID: C38EF38637B6130AEFD462CBD5EAC727 (SwiftUICore) |
6 | 6 | // Status: Complete
|
7 | 7 |
|
8 | 8 | #if !canImport(Darwin)
|
9 | 9 | package import Foundation
|
10 | 10 | #endif
|
11 | 11 | package import OpenGraphShims
|
12 | 12 |
|
| 13 | +// MARK: - ViewInputs [6.0.87] |
| 14 | + |
13 | 15 | package typealias ViewPhase = _GraphInputs.Phase
|
14 | 16 |
|
15 | 17 | package protocol ViewInput: GraphInput {}
|
@@ -50,7 +52,10 @@ public struct _ViewInputs {
|
50 | 52 |
|
51 | 53 | package var viewPhase: Attribute<ViewPhase> {
|
52 | 54 | get { base.phase }
|
53 |
| - set { base.phase = newValue } |
| 55 | + set { |
| 56 | + base.phase = newValue |
| 57 | + base.changedDebugProperties.formUnion(.phase) |
| 58 | + } |
54 | 59 | }
|
55 | 60 |
|
56 | 61 | package var transaction: Attribute<Transaction> {
|
@@ -227,28 +232,108 @@ extension _ViewInputs {
|
227 | 232 | }
|
228 | 233 |
|
229 | 234 | @inline(__always)
|
230 |
| - func detachedEnvironmentInputs() -> Self { |
| 235 | + func detachedEnvironmentInputs() -> _ViewInputs { |
231 | 236 | var newInputs = self
|
232 | 237 | newInputs.detachEnvironmentInputs()
|
233 | 238 | return newInputs
|
234 | 239 | }
|
235 | 240 | }
|
236 | 241 |
|
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 | + |
239 | 250 | 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 |
244 | 263 | }
|
245 | 264 |
|
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 |
250 | 316 | }
|
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 | + ) |
253 | 338 | }
|
254 | 339 | }
|
0 commit comments