-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
230 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
Sources/OpenSwiftUI/Core/View/VariadicView/VariadicView.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/// A type of structured content that is passed as an argument to a | ||
/// `Root`'s result builder, creating a `Tree` that conditionally conforms | ||
/// to protocols like `View`. | ||
/// | ||
/// For example, `View`s can be passed to a `Layout` result builder | ||
/// creating a `View`: | ||
/// | ||
/// HStack { | ||
/// Image(name: "envelope") | ||
/// Text("Your time away request has been approved") | ||
/// Spacer() | ||
/// Text(timestamp, format: .dateTime).layoutPriority(1) | ||
/// } | ||
/// | ||
public enum _VariadicView { | ||
public typealias Root = _VariadicView_Root | ||
public typealias ViewRoot = _VariadicView_ViewRoot | ||
public typealias Children = _VariadicView_Children | ||
// public typealias UnaryViewRoot = _VariadicView_UnaryViewRoot | ||
// public typealias MultiViewRoot = _VariadicView_MultiViewRoot | ||
|
||
@frozen | ||
public struct Tree<Root: _VariadicView_Root, Content> { | ||
public var root: Root | ||
public var content: Content | ||
@inlinable | ||
init(root: Root, content: Content) { | ||
self.root = root | ||
self.content = content | ||
} | ||
|
||
@inlinable public init(_ root: Root, @ViewBuilder content: () -> Content) { | ||
self.root = root | ||
self.content = content() | ||
} | ||
} | ||
} | ||
|
||
extension _VariadicView_ViewRoot { | ||
func bodyError() -> Never { | ||
fatalError("body() should not be called on \(Self.self)") | ||
} | ||
} | ||
|
||
extension _VariadicView_ViewRoot where Body == Never { | ||
public func body(children: _VariadicView.Children) -> Never { | ||
bodyError() | ||
} | ||
} |
6 changes: 6 additions & 0 deletions
6
Sources/OpenSwiftUI/Core/View/VariadicView/VariadicView_Children.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
// TODO | ||
|
||
/// An ad hoc collection of the children of a variadic view. | ||
public struct _VariadicView_Children { | ||
|
||
} |
24 changes: 24 additions & 0 deletions
24
Sources/OpenSwiftUI/Core/View/VariadicView/VariadicView_ImplicitRoot.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// | ||
// VariadicView_ImplicitRoot.swift | ||
// OpenSwiftUI | ||
// | ||
// Audited for RELEASE_2021 | ||
// Status: Complete | ||
|
||
protocol _VariadicView_AnyImplicitRoot { | ||
func visitType<Visitor: _VariadicView_ImplicitRootVisitor>(visitor: inout Visitor) | ||
} | ||
|
||
protocol _VariadicView_ImplicitRootVisitor { | ||
func visit<Root: _VariadicView_ImplicitRoot>(type: Root.Type) | ||
} | ||
|
||
protocol _VariadicView_ImplicitRoot: _VariadicView_AnyImplicitRoot, _VariadicView_ViewRoot { | ||
static var implicitRoot: Self { get } | ||
} | ||
|
||
extension _VariadicView_ImplicitRoot { | ||
func visitType<Visitor: _VariadicView_ImplicitRootVisitor>(visitor: inout Visitor) { | ||
visitor.visit(type: Self.self) | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
Sources/OpenSwiftUI/Core/View/VariadicView/VariadicView_Root.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// | ||
// VariadicView_ImplicitRoot.swift | ||
// OpenSwiftUI | ||
// | ||
// Audited for RELEASE_2021 | ||
// Status: Complete | ||
|
||
/// A type that creates a `Tree`, managing content subtrees passed to a result builder. | ||
/// | ||
/// - SeeAlso: _VariadicView.Root. | ||
public protocol _VariadicView_Root { | ||
static var _viewListOptions: Int { get } | ||
} | ||
|
||
extension _VariadicView_Root { | ||
public static var _viewListOptions: Int { | ||
0 | ||
} | ||
|
||
public static func _viewListCount( | ||
inputs _: _ViewListCountInputs, | ||
body _: (_ViewListCountInputs) -> Int? | ||
) -> Int? { | ||
nil | ||
} | ||
} |
82 changes: 82 additions & 0 deletions
82
Sources/OpenSwiftUI/Core/View/VariadicView/VariadicView_ViewRoot.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
// | ||
// VariadicView_ImplicitRoot.swift | ||
// OpenSwiftUI | ||
// | ||
// Audited for RELEASE_2021 | ||
// Status: WIP | ||
|
||
internal import OpenGraphShims | ||
|
||
/// A type of root that creates a `View` when its result builder is invoked with | ||
/// `View`. | ||
/// - SeeAlso: _VariadicView.ViewRoot. | ||
/// - Note: Requirements mirror `View`'s. | ||
public protocol _VariadicView_ViewRoot: _VariadicView_Root { | ||
associatedtype Body: View | ||
|
||
static func _makeView( | ||
root: _GraphValue<Self>, | ||
inputs: _ViewInputs, | ||
body: (_Graph, _ViewInputs) -> _ViewListOutputs | ||
) -> _ViewOutputs | ||
|
||
static func _makeViewList( | ||
root: _GraphValue<Self>, | ||
inputs: _ViewListInputs, | ||
body: @escaping (_Graph, _ViewListInputs) -> _ViewListOutputs | ||
) -> _ViewListOutputs | ||
|
||
static func _viewListCount( | ||
inputs: _ViewListCountInputs, | ||
body: (_ViewListCountInputs) -> Int? | ||
) -> Int? | ||
|
||
@ViewBuilder | ||
func body(children: _VariadicView.Children) -> Body | ||
} | ||
|
||
extension _VariadicView_ViewRoot { | ||
public static func _makeView( | ||
root: _GraphValue<Self>, | ||
inputs: _ViewInputs, | ||
body: (_Graph, _ViewInputs) -> _ViewListOutputs | ||
) -> _ViewOutputs { | ||
fatalError("TODO") | ||
} | ||
|
||
public static func _makeViewList( | ||
root: _GraphValue<Self>, | ||
inputs: _ViewListInputs, | ||
body: @escaping (_Graph, _ViewListInputs) -> _ViewListOutputs | ||
) -> _ViewListOutputs { | ||
fatalError("TODO") | ||
} | ||
|
||
public static func _viewListCount(inputs: _ViewListCountInputs) -> Int? { | ||
Body._viewListCount(inputs: inputs) | ||
} | ||
} | ||
|
||
|
||
// MARK: - ViewRootBody | ||
|
||
private struct ViewRootBody<Root> { | ||
@Attribute var root: Root | ||
@Attribute var list: ViewList | ||
let contentSubgraph: OGSubgraph | ||
} | ||
|
||
extension _ViewInputs { | ||
private struct ImplicitRootType: ViewInput { | ||
static let defaultValue: _VariadicView_AnyImplicitRoot.Type = _VStackLayout.self | ||
} | ||
} | ||
|
||
extension View { | ||
static func makeImplicitRoot(view: _GraphValue<Self>, inputs: _ViewInputs) -> _ViewOutputs { | ||
// TODO | ||
return .init() | ||
} | ||
} | ||
|
||
// TODO: ViewModifier |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
38 changes: 38 additions & 0 deletions
38
Sources/OpenSwiftUI/Layout/LayoutFundamentals/Stack/HVStackLayout.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import Foundation | ||
|
||
@frozen | ||
public struct _HStackLayout { | ||
public var alignment: VerticalAlignment | ||
public var spacing: CGFloat? | ||
|
||
@inlinable | ||
public init(alignment: VerticalAlignment = .center, spacing: CGFloat? = nil) { | ||
self.alignment = alignment | ||
self.spacing = spacing | ||
} | ||
|
||
public typealias AnimatableData = EmptyAnimatableData | ||
public typealias Body = Swift.Never | ||
} | ||
|
||
@frozen | ||
public struct _VStackLayout { | ||
public var alignment: HorizontalAlignment | ||
public var spacing: CGFloat? | ||
|
||
@inlinable | ||
public init(alignment: HorizontalAlignment = .center, spacing: CGFloat? = nil) { | ||
self.alignment = alignment | ||
self.spacing = spacing | ||
} | ||
|
||
public typealias AnimatableData = EmptyAnimatableData | ||
public typealias Body = Swift.Never | ||
} | ||
|
||
extension _HStackLayout: _VariadicView_ImplicitRoot { | ||
static var implicitRoot: _HStackLayout { _HStackLayout() } | ||
} | ||
extension _VStackLayout: _VariadicView_ImplicitRoot { | ||
static var implicitRoot: _VStackLayout { _VStackLayout() } | ||
} |
16 changes: 0 additions & 16 deletions
16
Sources/OpenSwiftUI/Layout/LayoutFundamentals/Stack/_HStackLayout.swift
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.