From fb5eafebd7674136b51c3e0443dcf287cf5a32ca Mon Sep 17 00:00:00 2001 From: Kyle Date: Sat, 26 Sep 2026 00:59:49 +0800 Subject: [PATCH] feat(shims): expose C path aliases --- Package.resolved | 2 +- Package.swift | 20 ++++-- README.md | 21 +++++++ .../OpenRenderBoxShimsCxx.c | 1 + .../OpenRenderBoxShims/OpenRenderBoxShims.h | 9 +++ .../include/OpenRenderBox/module.modulemap | 4 ++ .../OpenRenderBoxShims/OpenRenderBoxShims.h | 62 +++++++++++++++++++ .../include/RenderBox/module.modulemap | 4 ++ 8 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 Sources/OpenRenderBoxShimsCxx/OpenRenderBoxShimsCxx.c create mode 100644 Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h create mode 100644 Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/module.modulemap create mode 100644 Sources/OpenRenderBoxShimsCxx/include/RenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h create mode 100644 Sources/OpenRenderBoxShimsCxx/include/RenderBox/module.modulemap diff --git a/Package.resolved b/Package.resolved index ec63aa5..5336da5 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "79a10d248c4a2bb8cac89835379abd152272810c8ece94d61faf3565b4a22dd7", + "originHash" : "d5552e8d37bb4c7ffb6a5183f1774888d971574018f76ba350f2fd659cace426", "pins" : [ { "identity" : "darwinprivateframeworks", diff --git a/Package.swift b/Package.swift index 3a49c73..5257440 100644 --- a/Package.swift +++ b/Package.swift @@ -197,9 +197,9 @@ extension Target { dependencies.append( .product(name: "RenderBox", package: "DarwinPrivateFrameworks") ) - var swiftSettings = swiftSettings ?? [] - swiftSettings.append(.define("OPENRENDERBOX_RENDERBOX")) - self.swiftSettings = swiftSettings + cSettings = (cSettings ?? []) + [.define("OPENRENDERBOX_RENDERBOX")] + cxxSettings = (cxxSettings ?? []) + [.define("OPENRENDERBOX_RENDERBOX")] + swiftSettings = (swiftSettings ?? []) + [.define("OPENRENDERBOX_RENDERBOX")] } } @@ -231,8 +231,19 @@ let openRenderBoxCxxTarget = Target.target( ) let openRenderBoxShimsTarget = Target.target( name: "OpenRenderBoxShims", + dependencies: ["OpenRenderBoxShimsCxx"], swiftSettings: sharedSwiftSettings ) +let openRenderBoxShimsCxxTarget = Target.target( + name: "OpenRenderBoxShimsCxx", + dependencies: renderBoxCondtion + ? [.product(name: "RenderBox", package: "DarwinPrivateFrameworks")] + : ["OpenRenderBox"], + sources: ["OpenRenderBoxShimsCxx.c"], + publicHeadersPath: renderBoxCondtion ? "include/RenderBox" : "include/OpenRenderBox", + cSettings: sharedCSettings, + cxxSettings: sharedCxxSettings +) let openRenderBoxTestsTarget = Target.testTarget( name: "OpenRenderBoxTests", dependencies: [ @@ -270,7 +281,7 @@ let package = Package( name: "OpenRenderBox", products: [ .library(name: "OpenRenderBox", type: libraryType, targets: ["OpenRenderBox", "OpenRenderBoxCxx"]), - .library(name: "OpenRenderBoxShims", type: libraryType, targets: ["OpenRenderBoxShims"]), + .library(name: "OpenRenderBoxShims", type: libraryType, targets: ["OpenRenderBoxShims", "OpenRenderBoxShimsCxx"]), ], dependencies: [ .package(url: "https://github.com/apple/swift-numerics", from: "1.1.1"), @@ -279,6 +290,7 @@ let package = Package( openRenderBoxTarget, openRenderBoxCxxTarget, openRenderBoxShimsTarget, + openRenderBoxShimsCxxTarget, openRenderBoxTestsTarget, openRenderBoxCompatibilityTestTarget, ], diff --git a/README.md b/README.md index c0e850a..69f21a9 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,27 @@ Currently, this project is in early development. The current suggested toolchain to build the project is Swift 6.3.3 / Xcode 26.6. +## Shims + +The `OpenRenderBoxShims` product provides Swift aliases and a C header for path APIs. +Swift clients use: + +```swift +import OpenRenderBoxShims +``` + +C, C++, and Objective-C clients use: + +```c +#include +``` + +The C module is `OpenRenderBoxShimsCxx`; its public header uses the product name. + +The package selects the public header directory for the configured backend. +Clients use `ORB` names with either backend and do not need to define +`OPENRENDERBOX_RENDERBOX` in their preprocessor settings. + ## Supported platforms | **CI Status** | diff --git a/Sources/OpenRenderBoxShimsCxx/OpenRenderBoxShimsCxx.c b/Sources/OpenRenderBoxShimsCxx/OpenRenderBoxShimsCxx.c new file mode 100644 index 0000000..1b5629f --- /dev/null +++ b/Sources/OpenRenderBoxShimsCxx/OpenRenderBoxShimsCxx.c @@ -0,0 +1 @@ +// Empty file to make SwiftPM happy :) diff --git a/Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h b/Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h new file mode 100644 index 0000000..f643599 --- /dev/null +++ b/Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h @@ -0,0 +1,9 @@ +// +// OpenRenderBoxShims.h +// OpenRenderBoxShims + +#pragma once + +#include +#include +#include diff --git a/Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/module.modulemap b/Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/module.modulemap new file mode 100644 index 0000000..9ca6272 --- /dev/null +++ b/Sources/OpenRenderBoxShimsCxx/include/OpenRenderBox/module.modulemap @@ -0,0 +1,4 @@ +module OpenRenderBoxShimsCxx { + umbrella header "OpenRenderBoxShims/OpenRenderBoxShims.h" + export * +} diff --git a/Sources/OpenRenderBoxShimsCxx/include/RenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h b/Sources/OpenRenderBoxShimsCxx/include/RenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h new file mode 100644 index 0000000..cb42b95 --- /dev/null +++ b/Sources/OpenRenderBoxShimsCxx/include/RenderBox/OpenRenderBoxShims/OpenRenderBoxShims.h @@ -0,0 +1,62 @@ +// +// OpenRenderBoxShims.h +// OpenRenderBoxShims + +#pragma once + +#include +#include +#include + +typedef RBPath ORBPath; +typedef RBPathElement ORBPathElement; +typedef RBPathRoundedCornerStyle ORBPathRoundedCornerStyle; +typedef RBPathApplyCallback ORBPathApplyCallback; +typedef RBPathCallbacks ORBPathCallbacks; +typedef RBPathCallbacksFlags ORBPathCallbacksFlags; +typedef RBPathCallbacksExtended ORBPathCallbacksExtended; +typedef RBPathStorageRef ORBPathStorageRef; + +#define ORBPathElementMoveToPoint RBPathElementMoveToPoint +#define ORBPathElementAddLineToPoint RBPathElementAddLineToPoint +#define ORBPathElementAddQuadCurveToPoint RBPathElementAddQuadCurveToPoint +#define ORBPathElementAddCurveToPoint RBPathElementAddCurveToPoint +#define ORBPathElementCloseSubpath RBPathElementCloseSubpath +#define ORBPathElementRect RBPathElementRect +#define ORBPathElementRoundedRect RBPathElementRoundedRect +#define ORBPathElementFixedRoundedRectCircular RBPathElementFixedRoundedRectCircular +#define ORBPathElementFixedRoundedRectContinuous RBPathElementFixedRoundedRectContinuous +#define ORBPathElementInvalid RBPathElementInvalid + +#define ORBPathRoundedCornerStyleCircular RBPathRoundedCornerStyleCircular +#define ORBPathRoundedCornerStyleContinuous RBPathRoundedCornerStyleContinuous + +#define ORBPathEmpty RBPathEmpty +#define ORBPathNull RBPathNull +#define ORBPathRetain RBPathRetain +#define ORBPathRelease RBPathRelease +#define ORBPathMakeWithCGPath RBPathMakeWithCGPath +#define ORBPathMakeRect RBPathMakeRect +#define ORBPathMakeEllipse RBPathMakeEllipse +#define ORBPathMakeRoundedRect RBPathMakeRoundedRect +#define ORBPathMakeUnevenRoundedRect RBPathMakeUnevenRoundedRect +#define ORBPathIsEmpty RBPathIsEmpty +#define ORBPathApplyElements RBPathApplyElements +#define ORBPathEqualToPath RBPathEqualToPath +#define ORBPathCopyCGPath RBPathCopyCGPath +#define ORBPathContainsPoint RBPathContainsPoint +#define ORBPathContainsPoints RBPathContainsPoints + +#define ORBPathCGPathCallbacks RBPathCGPathCallbacks +#define ORBPathStorageInit RBPathStorageInit +#define ORBPathStorageDestroy RBPathStorageDestroy +#define ORBPathStorageClear RBPathStorageClear +#define ORBPathStorageAppendElement RBPathStorageAppendElement +#define ORBPathStorageAppendPath RBPathStorageAppendPath +#define ORBPathStorageApplyElements RBPathStorageApplyElements +#define ORBPathStorageIsEmpty RBPathStorageIsEmpty +#define ORBPathStorageEqualToStorage RBPathStorageEqualToStorage +#define ORBPathStorageIsSingleElement RBPathStorageIsSingleElement +#define ORBPathStorageGetBezierOrder RBPathStorageGetBezierOrder +#define ORBPathStorageGetBoundingRect RBPathStorageGetBoundingRect +#define ORBPathStorageGetCGPath RBPathStorageGetCGPath diff --git a/Sources/OpenRenderBoxShimsCxx/include/RenderBox/module.modulemap b/Sources/OpenRenderBoxShimsCxx/include/RenderBox/module.modulemap new file mode 100644 index 0000000..9ca6272 --- /dev/null +++ b/Sources/OpenRenderBoxShimsCxx/include/RenderBox/module.modulemap @@ -0,0 +1,4 @@ +module OpenRenderBoxShimsCxx { + umbrella header "OpenRenderBoxShims/OpenRenderBoxShims.h" + export * +}