From a6072b7af9a29f5d5867425076e0a02cf2fbad8a Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 12 Oct 2026 00:20:00 +0800 Subject: [PATCH] feat(shims): expose display list predicate and transform APIs --- Package.resolved | 4 +-- .../Render/ORBDisplayListContents.swift | 10 +++++++ .../Render/ORBDisplayListPredicate.swift | 23 +++++++++++++++ .../Render/ORBDisplayListTransform.swift | 21 ++++++++++++++ .../OpenRenderBoxCxx/Render/ORBDisplayList.m | 2 ++ .../Render/ORBDisplayListPredicate.m | 15 ++++++++++ .../Render/ORBDisplayListTransform.m | 15 ++++++++++ .../Render/ORBDisplayListContents.h | 4 +++ .../Render/ORBDisplayListPredicate.h | 29 +++++++++++++++++++ .../Render/ORBDisplayListTransform.h | 27 +++++++++++++++++ Sources/OpenRenderBoxShims/ORBShims.swift | 3 ++ 11 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 Sources/OpenRenderBox/Render/ORBDisplayListPredicate.swift create mode 100644 Sources/OpenRenderBox/Render/ORBDisplayListTransform.swift create mode 100644 Sources/OpenRenderBoxCxx/Render/ORBDisplayListPredicate.m create mode 100644 Sources/OpenRenderBoxCxx/Render/ORBDisplayListTransform.m create mode 100644 Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListPredicate.h create mode 100644 Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListTransform.h diff --git a/Package.resolved b/Package.resolved index ca0733b..ef0c0e2 100644 --- a/Package.resolved +++ b/Package.resolved @@ -7,7 +7,7 @@ "location" : "https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git", "state" : { "branch" : "main", - "revision" : "b00ecca4c7e77ab24da8c25d81f3d413db6fdcb5" + "revision" : "39e20ae06a042bbac3eefd4c3ff9d901b423dac8" } }, { @@ -16,7 +16,7 @@ "location" : "https://github.com/OpenSwiftUIProject/OpenCoreGraphics", "state" : { "branch" : "main", - "revision" : "8d63c405f565fb287042e0b8dc3bf0c4b8b2b56f" + "revision" : "df5ab4c4dcd0afc8fde978f6a0ad5228bb8aee17" } }, { diff --git a/Sources/OpenRenderBox/Render/ORBDisplayListContents.swift b/Sources/OpenRenderBox/Render/ORBDisplayListContents.swift index 155caf5..2ef95d6 100644 --- a/Sources/OpenRenderBox/Render/ORBDisplayListContents.swift +++ b/Sources/OpenRenderBox/Render/ORBDisplayListContents.swift @@ -7,6 +7,16 @@ public import Foundation public import OpenCoreGraphicsShims +public struct ORBDisplayListRenderKey: RawRepresentable, Hashable, Sendable { + public var rawValue: String + + public init(rawValue: String) { + self.rawValue = rawValue + } + + public static let rasterizationScale = ORBDisplayListRenderKey(rawValue: "rasterizationscale") +} + public protocol ORBDisplayListContents: AnyObject { var empty: Bool { get } var boundingRect: CGRect { get } diff --git a/Sources/OpenRenderBox/Render/ORBDisplayListPredicate.swift b/Sources/OpenRenderBox/Render/ORBDisplayListPredicate.swift new file mode 100644 index 0000000..1625a91 --- /dev/null +++ b/Sources/OpenRenderBox/Render/ORBDisplayListPredicate.swift @@ -0,0 +1,23 @@ +// +// ORBDisplayListPredicate.swift +// OpenRenderBox + +#if !canImport(ObjectiveC) +public import Foundation + +public class ORBDisplayListPredicate: NSObject { + public var invertsResult: Bool = false + + public func removeAll() { + _openRenderBoxUnimplementedFailure() + } + + public func addCondition(withFill color: ORBColor, colorSpace: ORBColor.ColorSpace) { + _openRenderBoxUnimplementedFailure() + } + + public func copyFilteredDisplayList(_ list: any ORBDisplayListContents) -> any ORBDisplayListContents { + _openRenderBoxUnimplementedFailure() + } +} +#endif diff --git a/Sources/OpenRenderBox/Render/ORBDisplayListTransform.swift b/Sources/OpenRenderBox/Render/ORBDisplayListTransform.swift new file mode 100644 index 0000000..c54a760 --- /dev/null +++ b/Sources/OpenRenderBox/Render/ORBDisplayListTransform.swift @@ -0,0 +1,21 @@ +// +// ORBDisplayListTransform.swift +// OpenRenderBox + +#if !canImport(ObjectiveC) +public import Foundation + +public class ORBDisplayListTransform: NSObject { + public func removeAll() { + _openRenderBoxUnimplementedFailure() + } + + public func addColorReplacement(from fromColor: ORBColor, to toColor: ORBColor, colorSpace: ORBColor.ColorSpace) { + _openRenderBoxUnimplementedFailure() + } + + public func copyApplying(toDisplayList list: any ORBDisplayListContents) -> any ORBDisplayListContents { + _openRenderBoxUnimplementedFailure() + } +} +#endif diff --git a/Sources/OpenRenderBoxCxx/Render/ORBDisplayList.m b/Sources/OpenRenderBoxCxx/Render/ORBDisplayList.m index ebc7f40..1604167 100644 --- a/Sources/OpenRenderBoxCxx/Render/ORBDisplayList.m +++ b/Sources/OpenRenderBoxCxx/Render/ORBDisplayList.m @@ -7,6 +7,8 @@ #if ORB_OBJC_FOUNDATION +ORBDisplayListRenderKey const ORBDisplayListRenderRasterizationScale = @"rasterizationscale"; + @interface ORBDisplayList () <_ORBDisplayListContents> @end diff --git a/Sources/OpenRenderBoxCxx/Render/ORBDisplayListPredicate.m b/Sources/OpenRenderBoxCxx/Render/ORBDisplayListPredicate.m new file mode 100644 index 0000000..ec7b238 --- /dev/null +++ b/Sources/OpenRenderBoxCxx/Render/ORBDisplayListPredicate.m @@ -0,0 +1,15 @@ +// +// ORBDisplayListPredicate.m +// OpenRenderBox + +#include + +#if ORB_OBJC_FOUNDATION + +@implementation ORBDisplayListPredicate + +// TODO + +@end + +#endif /* ORB_OBJC_FOUNDATION */ diff --git a/Sources/OpenRenderBoxCxx/Render/ORBDisplayListTransform.m b/Sources/OpenRenderBoxCxx/Render/ORBDisplayListTransform.m new file mode 100644 index 0000000..cb5012a --- /dev/null +++ b/Sources/OpenRenderBoxCxx/Render/ORBDisplayListTransform.m @@ -0,0 +1,15 @@ +// +// ORBDisplayListTransform.m +// OpenRenderBox + +#include + +#if ORB_OBJC_FOUNDATION + +@implementation ORBDisplayListTransform + +// TODO + +@end + +#endif /* ORB_OBJC_FOUNDATION */ diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListContents.h b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListContents.h index 1cc6a6d..1003d14 100644 --- a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListContents.h +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListContents.h @@ -20,6 +20,10 @@ ORB_ASSUME_NONNULL_BEGIN struct _ORBDrawingState; +typedef NSString *ORBDisplayListRenderKey NS_TYPED_EXTENSIBLE_ENUM; + +ORB_EXPORT ORBDisplayListRenderKey const ORBDisplayListRenderRasterizationScale ORB_SWIFT_NAME(ORBDisplayListRenderKey.rasterizationScale); + @protocol ORBDisplayListContents @required diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListPredicate.h b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListPredicate.h new file mode 100644 index 0000000..5bd3b22 --- /dev/null +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListPredicate.h @@ -0,0 +1,29 @@ +// +// ORBDisplayListPredicate.h +// OpenRenderBox + +#pragma once + +#include + +#if ORB_OBJC_FOUNDATION + +#include +#include +#include + +ORB_ASSUME_NONNULL_BEGIN + +@interface ORBDisplayListPredicate : NSObject + +@property (nonatomic) BOOL invertsResult; + +- (void)removeAll; +- (void)addConditionWithFillColor:(ORBColor)color colorSpace:(ORBColorSpace)colorSpace; +- (id)copyFilteredDisplayList:(id)list; + +@end + +ORB_ASSUME_NONNULL_END + +#endif /* ORB_OBJC_FOUNDATION */ diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListTransform.h b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListTransform.h new file mode 100644 index 0000000..948a93e --- /dev/null +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBDisplayListTransform.h @@ -0,0 +1,27 @@ +// +// ORBDisplayListTransform.h +// OpenRenderBox + +#pragma once + +#include + +#if ORB_OBJC_FOUNDATION + +#include +#include +#include + +ORB_ASSUME_NONNULL_BEGIN + +@interface ORBDisplayListTransform : NSObject + +- (void)removeAll; +- (void)addColorReplacementFrom:(ORBColor)fromColor to:(ORBColor)toColor colorSpace:(ORBColorSpace)colorSpace; +- (id)copyApplyingToDisplayList:(id)list; + +@end + +ORB_ASSUME_NONNULL_END + +#endif /* ORB_OBJC_FOUNDATION */ diff --git a/Sources/OpenRenderBoxShims/ORBShims.swift b/Sources/OpenRenderBoxShims/ORBShims.swift index 278f6da..7ac442e 100644 --- a/Sources/OpenRenderBoxShims/ORBShims.swift +++ b/Sources/OpenRenderBoxShims/ORBShims.swift @@ -31,6 +31,9 @@ public typealias ORBDevice = RBDevice public typealias ORBDisplayList = RBDisplayList public typealias ORBDisplayListContents = RBDisplayListContents public typealias ORBDisplayListInterpolator = RBDisplayListInterpolator +public typealias ORBDisplayListPredicate = RBDisplayListPredicate +public typealias ORBDisplayListRenderKey = RBDisplayListRenderKey +public typealias ORBDisplayListTransform = RBDisplayListTransform public typealias ORBLayer = RBLayer public typealias ORBLayerDelegate = RBLayerDelegate public typealias ORBPath = RBPath