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
15 changes: 13 additions & 2 deletions Sources/OpenSwiftUICore/Render/PlatformViewDefinition.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// Status: Blocked by PlatformDrawable and GraphicsContext

import OpenSwiftUI_SPI
#if canImport(Darwin)
#if canImport(QuartzCore)
public import QuartzCore
#else
import Foundation
Expand Down Expand Up @@ -49,7 +49,7 @@ open class PlatformViewDefinition: @unchecked Sendable {
}
}

open class var system: PlatformViewDefinition.System { .init(base: .swiftUIView) }
open class var system: PlatformViewDefinition.System { .init(base: .caLayer) }
open class func makeView(kind: PlatformViewDefinition.ViewKind) -> AnyObject { _openSwiftUIBaseClassAbstractMethod() }
#if canImport(Darwin)
open class func makeLayerView(type: CALayer.Type, kind: PlatformViewDefinition.ViewKind) -> AnyObject { _openSwiftUIBaseClassAbstractMethod() }
Expand Down Expand Up @@ -91,6 +91,17 @@ extension DisplayList.ViewUpdater.Platform {
var definition: PlatformViewDefinition.Type {
return unsafeBitCast(rawValue & ~3, to: PlatformViewDefinition.Type.self)
}

@inline(__always)
var viewSystem: ViewSystem {
return unsafeBitCast(UInt8(rawValue & 3), to: ViewSystem.self)
}

#if canImport(QuartzCore)
package func viewLayer(_ view: AnyObject) -> CALayer {
CoreViewLayer(system: viewSystem, view: view)
}
#endif
}

extension DisplayList.GraphicsRenderer {
Expand Down
26 changes: 26 additions & 0 deletions Sources/OpenSwiftUI_SPI/Overlay/CoreGraphics/OpenSwiftUICoreView.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// OpenSwiftUICoreView.h
// OpenSwiftUI_SPI
//
// Status: WIP
// Audited for 6.5.4

#ifndef OpenSwiftUICoreView_h
#define OpenSwiftUICoreView_h

#include "OpenSwiftUIBase.h"

#if OPENSWIFTUI_TARGET_OS_DARWIN

#include "OpenSwiftUIViewSystem.h"
#include <QuartzCore/QuartzCore.h>

NS_ASSUME_NONNULL_BEGIN

CALayer * OpenSwiftUICoreViewLayer(OpenSwiftUIViewSystem system, id view) OPENSWIFTUI_SWIFT_NAME(CoreViewLayer(system:view:));

NS_ASSUME_NONNULL_END

#endif /* OPENSWIFTUI_TARGET_OS_DARWIN */

#endif /* OpenSwiftUICoreView_h */
20 changes: 20 additions & 0 deletions Sources/OpenSwiftUI_SPI/Overlay/CoreGraphics/OpenSwiftUICoreView.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// OpenSwiftUICoreView.m
// OpenSwiftUI_SPI
//
// Status: WIP
// Audited for 6.5.4

#import "OpenSwiftUICoreView.h"

#if OPENSWIFTUI_TARGET_OS_DARWIN

CALayer * OpenSwiftUICoreViewLayer(OpenSwiftUIViewSystem system, id view) {
if (system == OpenSwiftUIViewSystemCALayer) {
return view;
} else {
return [view layer];
}
}

#endif /* OPENSWIFTUI_TARGET_OS_DARWIN */
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
typedef OPENSWIFTUI_ENUM(uint8_t, OpenSwiftUIViewSystem) {
OpenSwiftUIViewSystemUIView,
OpenSwiftUIViewSystemNSView,
OpenSwiftUIViewSystemSwiftUIView,
OpenSwiftUIViewSystemCALayer,
} OPENSWIFTUI_SWIFT_NAME(ViewSystem);

#endif /* OpenSwiftUIViewSystem_h */