OpenSwiftUIGlue.swift 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. //
  2. // OpenSwiftUIGlue.swift
  3. // ark_ui_basic
  4. //
  5. // Audited for 6.0.87
  6. // Status: WIP
  7. public import Foundation
  8. @_spi(ForOpenSwiftUIOnly)
  9. public import ark_ui_basic_core
  10. @_spiOnly
  11. public import OpenAttributeGraphShims
  12. import c_ark_ui_basic
  13. // MARK: - OpenSwiftUIGlue
  14. @_spi(ForOpenSwiftUIOnly)
  15. @_silgen_name("OpenSwiftUIGlueClass")
  16. public func OpenSwiftUIGlueClass() -> CoreGlue.Type {
  17. OpenSwiftUIGlue.self
  18. }
  19. @_spi(ForOpenSwiftUIOnly)
  20. #if canImport(ObjectiveC)
  21. @objc(OpenSwiftUIGlue)
  22. #endif
  23. final public class OpenSwiftUIGlue: CoreGlue {
  24. override final public func maxVelocity(_ velocity: CGFloat) {
  25. ViewGraph.current.nextUpdate.views.maxVelocity(velocity)
  26. }
  27. override final public func nextUpdate(nextTime: Time, interval: Double, reason: UInt32?) {
  28. ViewGraph.current.nextUpdate.views.at(nextTime)
  29. ViewGraph.current.nextUpdate.views.interval(interval, reason: reason)
  30. }
  31. override final public func hasTestHost() -> Bool {
  32. _TestApp.host != nil
  33. }
  34. override final public func isInstantiated(graph: Graph) -> Bool {
  35. graph.viewGraph().isInstantiated
  36. }
  37. override final public var defaultImplicitRootType: DefaultImplicitRootTypeResult {
  38. DefaultImplicitRootTypeResult(_VStackLayout.self)
  39. }
  40. override final public var defaultSpacing: CGSize {
  41. CGSize(width: 8, height: 8)
  42. }
  43. override final public func makeDefaultLayoutComputer() -> MakeDefaultLayoutComputerResult {
  44. MakeDefaultLayoutComputerResult(value: ViewGraph.current.$defaultLayoutComputer)
  45. }
  46. override final public func makeDefaultLayoutComputer(graph: Graph) -> MakeDefaultLayoutComputerResult {
  47. MakeDefaultLayoutComputerResult(value: graph.viewGraph().$defaultLayoutComputer)
  48. }
  49. override final public func makeLayoutView<L>(
  50. root: _GraphValue<L>,
  51. inputs: _ViewInputs,
  52. body: (_Graph, _ViewInputs) -> _ViewListOutputs
  53. ) -> _ViewOutputs where L: Layout {
  54. L.makeLayoutView(root: root, inputs: inputs, body: body)
  55. }
  56. // TODO
  57. }
  58. @_spi(ForOpenSwiftUIOnly)
  59. @available(*, unavailable)
  60. extension OpenSwiftUIGlue: Sendable {}
  61. // MARK: - OpenSwiftUIGlue2
  62. @_spi(ForOpenSwiftUIOnly)
  63. @_silgen_name("OpenSwiftUIGlue2Class")
  64. public func OpenSwiftUIGlue2Class() -> CoreGlue2.Type {
  65. OpenSwiftUIGlue2.self
  66. }
  67. @_spi(ForOpenSwiftUIOnly)
  68. #if canImport(ObjectiveC)
  69. @objc(OpenSwiftUIGlue2)
  70. #endif
  71. final public class OpenSwiftUIGlue2: CoreGlue2 {
  72. #if os(iOS) || os(visionOS)
  73. override public final func initializeTestApp() {
  74. _PerformTestingSwizzles()
  75. }
  76. #endif
  77. override public final func isStatusBarHidden() -> Bool? {
  78. #if os(iOS) || os(visionOS)
  79. guard let scene = UIApplication.shared.connectedScenes.first,
  80. let windowScene = scene as? UIWindowScene
  81. else {
  82. return nil
  83. }
  84. return windowScene.statusBarManager?.isStatusBarHidden ?? false
  85. #else
  86. nil
  87. #endif
  88. }
  89. override public final func configureDefaultEnvironment(_: inout EnvironmentValues) {
  90. #if os(iOS) || os(visionOS)
  91. #else
  92. // TODO
  93. #endif
  94. }
  95. override public func configureEmptyEnvironment(_ environment: inout EnvironmentValues) {
  96. environment.configureForPlatform(traitCollection: nil)
  97. }
  98. override public final func makeRootView(base: AnyView, rootFocusScope: Namespace.ID) -> AnyView {
  99. AnyView(base.safeAreaInsets(.zero, next: nil))
  100. }
  101. override public final var systemDefaultDynamicTypeSize: DynamicTypeSize {
  102. #if os(iOS) || os(visionOS)
  103. let size = _UIApplicationDefaultContentSizeCategory()
  104. let dynamicSize = DynamicTypeSize(size)
  105. return dynamicSize ?? .large
  106. #else
  107. // TODO: macOS
  108. return .large
  109. #endif
  110. }
  111. override public final var codableAttachmentCellType: CodableAttachmentCellTypeResult {
  112. CodableAttachmentCellTypeResult(nil)
  113. }
  114. override public final func linkURL(_ parameters: LinkURLParameters) -> URL? {
  115. _openSwiftUIUnimplementedFailure()
  116. }
  117. public override func transformingEquivalentAttributes(_ attributedString: AttributedString) -> AttributedString {
  118. _openSwiftUIUnimplementedWarning()
  119. return attributedString
  120. }
  121. }
  122. @_spi(ForOpenSwiftUIOnly)
  123. @available(*, unavailable)
  124. extension OpenSwiftUIGlue2: Sendable {}