Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Sources/OpenSwiftUICore/Event/Gesture/GestureDebug.swift
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ extension _GestureOutputs {
}
reallyWrap(
type,
kind: conformsToProtocol(type, _OpenSwiftUI_gestureModifierProtocolDescriptor()) ? .modifier : .primitive,
kind: conformsToProtocol(type, _gestureModifierProtocolDescriptor()) ? .modifier : .primitive,
properties: properties,
inputs: inputs,
data: (debugData, nil)
Expand Down
4 changes: 2 additions & 2 deletions Sources/OpenSwiftUICore/Event/Gesture/GestureDescriptor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ package struct GestureDescriptor: TupleDescriptor {
package static var typeCache: [ObjectIdentifier: TupleTypeDescription<GestureDescriptor>] = [:]

package static var descriptor: UnsafeRawPointer {
_OpenSwiftUI_gestureProtocolDescriptor()
_gestureProtocolDescriptor()
}
}

Expand All @@ -22,6 +22,6 @@ package struct GestureModifierDescriptor: TupleDescriptor {
package static var typeCache: [ObjectIdentifier: TupleTypeDescription<GestureModifierDescriptor>] = [:]

package static var descriptor: UnsafeRawPointer {
_OpenSwiftUI_gestureModifierProtocolDescriptor()
_gestureModifierProtocolDescriptor()
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
//
// StaticIf.swift
// OpenSwiftUI
// OpenSwiftUICore
//
// Audited for 6.0.87
// Audited for 6.5.4
// Status: Complete

import OpenSwiftUICore

/// A container view that conditionally renders one of two views based on a `ViewInputPredicate`.
///
/// `StaticIf` makes view selection decisions based on the evaluation of a `ViewInputPredicate`
Expand Down Expand Up @@ -228,7 +226,23 @@ extension ViewModifier {
///
/// - Parameter predicate: The predicate type used to evaluate against view inputs.
/// - Returns: A conditional modifier that applies the current modifier only when the predicate is true.
package func requiring<Predicate>(_ predicate: Predicate.Type) -> StaticIf<Predicate, Self, EmptyModifier> where Predicate: ViewInputPredicate {
package func requiring<Predicate>(
_ predicate: Predicate.Type
) -> StaticIf<
Predicate,
Self,
EmptyModifier
> where Predicate: ViewInputPredicate {
StaticIf(predicate, then: self)
}

package func requiring<each Q>(
_ queries: repeat (each Q).Type
) -> StaticIf<
StyleContextAcceptsPredicate<(repeat each Q)>,
Self,
EmptyModifier
> where repeat each Q: StyleContext {
StaticIf(StyleContextAcceptsPredicate<(repeat each Q)>.self, then: self)
}
}
69 changes: 69 additions & 0 deletions Sources/OpenSwiftUICore/View/Style/AnyStyleContext.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//
// AnyStyleContext.swift
// OpenSwiftUICore
//
// Audited for 6.5.4
// Status: Complete
// ID: 95C35B9B1549B6F41E131C274C6E343F (SwiftUICore)

// MARK: - AnyStyleContextType

package struct AnyStyleContextType: Equatable {
private let base: any AnyStyleContextTypeBox.Type

private init(base: any AnyStyleContextTypeBox.Type) {
self.base = base
}

package init<C>(_ context: C.Type = C.self) where C: StyleContext {
base = StyleContextTypeBox<C>.self
}

package static func == (lhs: AnyStyleContextType, rhs: AnyStyleContextType) -> Bool {
lhs.base.isEqual(to: rhs.base)
}

package func acceptsTop<Q>(_ query: Q.Type) -> Bool {
base.acceptsTop(query)
}

package func pushing<N>(_ newContext: N.Type) -> AnyStyleContextType where N: StyleContext {
AnyStyleContextType(base: base.pushing(newContext))
}

package func acceptsAny<each Q>(_ queries: repeat (each Q).Type) -> Bool where repeat each Q: StyleContext {
base.acceptsAny(repeat each queries)
}
}

// MARK: - AnyStyleContextTypeBox

private protocol AnyStyleContextTypeBox {
static func isEqual(to other: AnyStyleContextTypeBox.Type) -> Bool

static func acceptsTop<Q>(_ query: Q.Type) -> Bool

static func acceptsAny<each Q>(_ queries: repeat (each Q).Type) -> Bool where repeat each Q: StyleContext

static func pushing<N>(_ newContext: N.Type) -> AnyStyleContextTypeBox.Type where N: StyleContext
}

// MARK: - StyleContextTypeBox

private struct StyleContextTypeBox<Context>: AnyStyleContextTypeBox where Context: StyleContext {
static func isEqual(to other: AnyStyleContextTypeBox.Type) -> Bool {
other is StyleContextTypeBox<Context>.Type
}

static func acceptsTop<Q>(_ query: Q.Type) -> Bool {
Context.acceptsTop(query)
}

static func acceptsAny<each Q>(_ queries: repeat (each Q).Type) -> Bool where repeat each Q: StyleContext {
Context.acceptsAny(repeat each queries)
}

static func pushing<N>(_ newContext: N.Type) -> AnyStyleContextTypeBox.Type where N: StyleContext {
StyleContextTypeBox<TupleStyleContext<(N, Context)>>.self
}
}
Loading