Skip to content

Commit 0cf9fb1

Browse files
authored
Add CorePlatformImage support (#150)
* Update CoreColor and ColorGraphics API A * Add CorePlatformImage support * Add CorePlatformImageTests
1 parent 467a753 commit 0cf9fb1

18 files changed

+443
-81
lines changed

Sources/OpenSwiftUICore/Graphic/Color/ColorResolved.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ extension Color.Resolved {
322322
var green: CGFloat = 0
323323
var blue: CGFloat = 0
324324
var alpha: CGFloat = 0
325-
let result = OpenSwiftUICoreColorPlatformColorGetComponents(isAppKitBased(), platformColor, &red, &green, &blue, &alpha)
325+
let result = CoreColorPlatformColorGetComponents(system: isAppKitBased() ? .appKit : .uiKit, color: platformColor, red: &red, green: &green, blue: &blue, alpha: &alpha)
326326
if result {
327327
self.init(red: Float(red), green: Float(green), blue: Float(blue), opacity: Float(alpha))
328328
} else {
@@ -332,7 +332,7 @@ extension Color.Resolved {
332332

333333
// ID: 4330A474F53D66045762501ED6F8A749
334334
private static let cache: ObjectCache<Color.Resolved, NSObject> = ObjectCache { resolved in
335-
OpenSwiftUICoreColor.platformColor(resolvedColor: resolved)!
335+
CoreColor.platformColor(resolvedColor: resolved)!
336336
}
337337

338338
package var kitColor: NSObject {

Sources/OpenSwiftUICore/Graphic/Color/CoreColor+Extension.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
import Foundation
1010
internal import OpenSwiftUI_SPI
1111

12-
extension OpenSwiftUICoreColor {
12+
extension CoreColor {
1313
package static func platformColor(resolvedColor: Color.Resolved) -> NSObject? {
1414
platformColor(red: CGFloat(resolvedColor.red), green: CGFloat(resolvedColor.green), blue: CGFloat(resolvedColor.blue), alpha: CGFloat(resolvedColor.opacity))
1515
}
1616

1717
package static func platformColor(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) -> NSObject? {
18-
OpenSwiftUICorePlatformColorForRGBA(isAppKitBased(), red, green, blue, alpha)
18+
CorePlatformColorForRGBA(system: isAppKitBased() ? .appKit : .uiKit, red: red, green: green, blue: blue, alpha: alpha)
1919
}
2020
}
2121

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//
2+
// CorePlatformImage.swift
3+
// OpenSwiftUICore
4+
//
5+
// Audited for RELEASE_2024
6+
// Status: WIP
7+
8+
#if canImport(Darwin)
9+
import Foundation
10+
package import OpenSwiftUI_SPI
11+
12+
@objc(OpenSwiftUICorePlatformImage)
13+
package final class CorePlatformImage: NSObject {
14+
package var system: CoreSystem
15+
package var kitImage: NSObject
16+
package var isTemplate: Bool
17+
18+
package init(system: CoreSystem, kitImage: NSObject) {
19+
self.system = system
20+
self.kitImage = kitImage
21+
self.isTemplate = _CorePlatformImageIsTemplate(system: system, kitImage: kitImage)
22+
super.init()
23+
}
24+
25+
convenience package init(system: CoreSystem, cgImage: CGImage, scale: CGFloat, orientation: UInt8){
26+
self.init(
27+
system: system,
28+
kitImage: _CorePlatformImageMakeKitImage(system: system, cgImage: cgImage, scale: scale, orientation: orientation)
29+
)
30+
}
31+
32+
package var cgImage: CGImage? {
33+
_CorePlatformImageGetCGImage(system: system, kitImage: kitImage)
34+
}
35+
36+
package var size: CGSize {
37+
_CorePlatformImageGetSize(system: system, kitImage: kitImage)
38+
}
39+
40+
package var scale: CGFloat {
41+
_CorePlatformImageGetScale(system: system, kitImage: kitImage)
42+
}
43+
44+
package var imageOrientation: UInt8 {
45+
_CorePlatformImageGetImageOrientation(system: system, kitImage: kitImage)
46+
}
47+
48+
package var baselineOffsetFromBottom: CGFloat {
49+
_CorePlatformImageGetBaselineOffsetFromBottom(system: system, kitImage: kitImage)
50+
}
51+
52+
package var alignmentRect: CGRect {
53+
get { _CorePlatformImageGetAlignmentRect(system: system, kitImage: kitImage) }
54+
set { _CorePlatformImageSetAlignmentRect(system: system, kitImage: kitImage, newValue) }
55+
}
56+
}
57+
#endif

Sources/OpenSwiftUICore/Render/PlatformViewDefinition.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ open class PlatformViewDefinition: @unchecked Sendable {
4747
}
4848
}
4949

50-
open class var system: PlatformViewDefinition.System { .init(base: ._2) }
50+
open class var system: PlatformViewDefinition.System { .init(base: .swiftUIView) }
5151
open class func makeView(kind: PlatformViewDefinition.ViewKind) -> AnyObject { fatalError() }
5252
#if canImport(Darwin)
5353
open class func makeLayerView(type: CALayer.Type, kind: PlatformViewDefinition.ViewKind) -> AnyObject { fatalError() }

Sources/OpenSwiftUI_SPI/OpenSwiftUIBase.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,20 @@
7070

7171
#define OPENSWIFTUI_ENUM CF_ENUM
7272

73+
#ifndef OPENSWIFTUI_IMPLICIT_BRIDGING_ENABLED
74+
#if __has_feature(arc_cf_code_audited)
75+
#define OPENSWIFTUI_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin")
76+
#else
77+
#define OPENSWIFTUI_IMPLICIT_BRIDGING_ENABLED
78+
#endif
79+
#endif
80+
81+
#ifndef OPENSWIFTUI_IMPLICIT_BRIDGING_DISABLED
82+
#if __has_feature(arc_cf_code_audited)
83+
#define OPENSWIFTUI_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end")
84+
#else
85+
#define OPENSWIFTUI_IMPLICIT_BRIDGING_DISABLED
86+
#endif
87+
#endif
88+
7389
#endif /* OpenSwiftUIBase_h */

Sources/OpenSwiftUI_SPI/Overlay/CoreGraphics/OpenSwiftUICoreColor.h

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,37 @@
1717
#else
1818
#include <AppKit/AppKit.h>
1919
#endif
20+
#include "OpenSwiftUICoreSystem.h"
2021

2122
OPENSWIFTUI_ASSUME_NONNULL_BEGIN
2223

2324
OPENSWIFTUI_EXPORT
24-
BOOL OpenSwiftUICoreColorPlatformColorGetComponents(BOOL system, id color, CGFloat *red, CGFloat *green, CGFloat *blue, CGFloat *alpha);
25+
BOOL OpenSwiftUICoreColorPlatformColorGetComponents(OpenSwiftUICoreSystem system, id color, CGFloat *red, CGFloat *green, CGFloat *blue, CGFloat *alpha) OPENSWIFTUI_SWIFT_NAME(CoreColorPlatformColorGetComponents(system:color:red:green:blue:alpha:));
2526

2627
OPENSWIFTUI_EXPORT
27-
NSObject * _Nullable OpenSwiftUICorePlatformColorForRGBA(BOOL system, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);
28+
NSObject * _Nullable OpenSwiftUICorePlatformColorForRGBA(OpenSwiftUICoreSystem system, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha) OPENSWIFTUI_SWIFT_NAME(CorePlatformColorForRGBA(system:red:green:blue:alpha:));
2829

2930
OPENSWIFTUI_EXPORT
30-
Class _Nullable OpenSwiftUICoreColorGetKitColorClass(BOOL system);
31+
Class _Nullable OpenSwiftUICoreColorGetKitColorClass(OpenSwiftUICoreSystem system) OPENSWIFTUI_SWIFT_NAME(CoreColorGetKitColorClass(system:));
3132

33+
OPENSWIFTUI_SWIFT_NAME(CoreColor)
3234
@interface OpenSwiftUICoreColor : NSObject
3335

34-
+ (nullable NSObject *)colorWithSystem:(BOOL)system cgColor: (CGColorRef)cgColor;
35-
+ (nullable NSObject *)blackColorWithSystem:(BOOL)system;
36-
+ (nullable NSObject *)systemRedColorWithSystem:(BOOL)system;
37-
+ (nullable NSObject *)systemOrangeColorWithSystem:(BOOL)system;
38-
+ (nullable NSObject *)systemYellowColorWithSystem:(BOOL)system;
39-
+ (nullable NSObject *)systemGreenColorWithSystem:(BOOL)system;
40-
+ (nullable NSObject *)systemTealColorWithSystem:(BOOL)system;
41-
+ (nullable NSObject *)systemMintColorWithSystem:(BOOL)system;
42-
+ (nullable NSObject *)systemCyanColorWithSystem:(BOOL)system;
43-
+ (nullable NSObject *)systemBlueColorWithSystem:(BOOL)system;
44-
+ (nullable NSObject *)systemIndigoColorWithSystem:(BOOL)system;
45-
+ (nullable NSObject *)systemPurpleColorWithSystem:(BOOL)system;
46-
+ (nullable NSObject *)systemPinkColorWithSystem:(BOOL)system;
47-
+ (nullable NSObject *)systemBrownColorWithSystem:(BOOL)system;
48-
+ (nullable NSObject *)systemGrayColorWithSystem:(BOOL)system;
36+
+ (nullable NSObject *)colorWithSystem:(OpenSwiftUICoreSystem)system cgColor: (CGColorRef)cgColor;
37+
+ (nullable NSObject *)blackColorWithSystem:(OpenSwiftUICoreSystem)system;
38+
+ (nullable NSObject *)systemRedColorWithSystem:(OpenSwiftUICoreSystem)system;
39+
+ (nullable NSObject *)systemOrangeColorWithSystem:(OpenSwiftUICoreSystem)system;
40+
+ (nullable NSObject *)systemYellowColorWithSystem:(OpenSwiftUICoreSystem)system;
41+
+ (nullable NSObject *)systemGreenColorWithSystem:(OpenSwiftUICoreSystem)system;
42+
+ (nullable NSObject *)systemTealColorWithSystem:(OpenSwiftUICoreSystem)system;
43+
+ (nullable NSObject *)systemMintColorWithSystem:(OpenSwiftUICoreSystem)system;
44+
+ (nullable NSObject *)systemCyanColorWithSystem:(OpenSwiftUICoreSystem)system;
45+
+ (nullable NSObject *)systemBlueColorWithSystem:(OpenSwiftUICoreSystem)system;
46+
+ (nullable NSObject *)systemIndigoColorWithSystem:(OpenSwiftUICoreSystem)system;
47+
+ (nullable NSObject *)systemPurpleColorWithSystem:(OpenSwiftUICoreSystem)system;
48+
+ (nullable NSObject *)systemPinkColorWithSystem:(OpenSwiftUICoreSystem)system;
49+
+ (nullable NSObject *)systemBrownColorWithSystem:(OpenSwiftUICoreSystem)system;
50+
+ (nullable NSObject *)systemGrayColorWithSystem:(OpenSwiftUICoreSystem)system;
4951

5052
- (instancetype)initWithCGColor:(CGColorRef)cgColor;
5153
- (void)set;

Sources/OpenSwiftUI_SPI/Overlay/CoreGraphics/OpenSwiftUICoreColor.m

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
#if OPENSWIFTUI_TARGET_OS_DARWIN
1111
#include "OpenSwiftUICoreGraphicsContext.h"
1212

13-
Class OpenSwiftUICoreColorClass(BOOL system);
13+
Class OpenSwiftUICoreColorClass(OpenSwiftUICoreSystem system);
1414

1515
#if OPENSWIFTUI_TARGET_OS_OSX
1616
id NSColorSpaceForCGColorSpace(CGColorSpaceRef cgColorSpace);
1717
Class NSColorSpaceClass(void);
1818
#endif
1919

20-
BOOL OpenSwiftUICoreColorPlatformColorGetComponents(BOOL system, id color, CGFloat *red, CGFloat *green, CGFloat *blue, CGFloat *alpha) {
20+
BOOL OpenSwiftUICoreColorPlatformColorGetComponents(OpenSwiftUICoreSystem system, id color, CGFloat *red, CGFloat *green, CGFloat *blue, CGFloat *alpha) {
2121
Class colorClass = OpenSwiftUICoreColorClass(system);
2222
if (!colorClass) {
2323
return NO;
@@ -44,13 +44,13 @@ BOOL OpenSwiftUICoreColorPlatformColorGetComponents(BOOL system, id color, CGFlo
4444
#endif
4545
}
4646

47-
NSObject *OpenSwiftUICorePlatformColorForRGBA(BOOL system, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha) {
47+
NSObject *OpenSwiftUICorePlatformColorForRGBA(OpenSwiftUICoreSystem system, CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha) {
4848
Class colorClass = OpenSwiftUICoreColorClass(system);
4949
if (!colorClass) {
5050
return nil;
5151
}
5252
#if OPENSWIFTUI_TARGET_OS_OSX
53-
if (system) {
53+
if (system == OpenSwiftUICoreSystemAppKit) {
5454
id colorSpace = NSColorSpaceForCGColorSpace(CGColorSpaceCreateWithName(kCGColorSpaceExtendedSRGB));
5555
return [colorClass colorWithColorSpace:colorSpace components:(CGFloat[]){red, green, blue, alpha} count:4];
5656
} else {
@@ -61,22 +61,22 @@ BOOL OpenSwiftUICoreColorPlatformColorGetComponents(BOOL system, id color, CGFlo
6161
#endif
6262
}
6363

64-
Class _Nullable OpenSwiftUICoreColorGetKitColorClass(BOOL system) {
64+
Class _Nullable OpenSwiftUICoreColorGetKitColorClass(OpenSwiftUICoreSystem system) {
6565
return OpenSwiftUICoreColorClass(system);
6666
}
6767

68-
Class _Nullable OpenSwiftUICoreColorClass(BOOL system) {
68+
Class _Nullable OpenSwiftUICoreColorClass(OpenSwiftUICoreSystem system) {
6969
static BOOL isValid = true;
7070
static Class colorClass;
7171
static dispatch_once_t once;
7272
dispatch_once(&once, ^{
7373
#if OPENSWIFTUI_TARGET_OS_OSX
74-
if (!system) {
74+
if (system == OpenSwiftUICoreSystemUIKit) {
7575
Class class = NSClassFromString(@"UIColor");
7676
colorClass = class;
7777
isValid = class != nil;
7878
}
79-
if (system) {
79+
if (system == OpenSwiftUICoreSystemAppKit) {
8080
Class class = NSClassFromString(@"NSColor");
8181
colorClass = class;
8282
isValid = class != nil;
@@ -122,7 +122,7 @@ @interface OpenSwiftUICoreColor () {
122122

123123
@implementation OpenSwiftUICoreColor
124124

125-
+ (NSObject *)colorWithSystem:(BOOL)system cgColor: (CGColorRef)cgColor {
125+
+ (NSObject *)colorWithSystem:(OpenSwiftUICoreSystem)system cgColor: (CGColorRef)cgColor {
126126
Class colorClass = OpenSwiftUICoreColorClass(system);
127127
if (colorClass) {
128128
return [colorClass colorWithCGColor: cgColor];
@@ -131,72 +131,72 @@ + (NSObject *)colorWithSystem:(BOOL)system cgColor: (CGColorRef)cgColor {
131131
}
132132
}
133133

134-
+ (NSObject *)blackColorWithSystem:(BOOL)system {
134+
+ (NSObject *)blackColorWithSystem:(OpenSwiftUICoreSystem)system {
135135
Class colorClass = OpenSwiftUICoreColorClass(system);
136136
return [colorClass blackColor];
137137
}
138138

139-
+ (NSObject *)systemRedColorWithSystem:(BOOL)system {
139+
+ (NSObject *)systemRedColorWithSystem:(OpenSwiftUICoreSystem)system {
140140
Class colorClass = OpenSwiftUICoreColorClass(system);
141141
return [colorClass systemRedColor];
142142
}
143143

144-
+ (NSObject *)systemOrangeColorWithSystem:(BOOL)system {
144+
+ (NSObject *)systemOrangeColorWithSystem:(OpenSwiftUICoreSystem)system {
145145
Class colorClass = OpenSwiftUICoreColorClass(system);
146146
return [colorClass systemOrangeColor];
147147
}
148148

149-
+ (NSObject *)systemYellowColorWithSystem:(BOOL)system {
149+
+ (NSObject *)systemYellowColorWithSystem:(OpenSwiftUICoreSystem)system {
150150
Class colorClass = OpenSwiftUICoreColorClass(system);
151151
return [colorClass systemYellowColor];
152152
}
153153

154-
+ (NSObject *)systemGreenColorWithSystem:(BOOL)system {
154+
+ (NSObject *)systemGreenColorWithSystem:(OpenSwiftUICoreSystem)system {
155155
Class colorClass = OpenSwiftUICoreColorClass(system);
156156
return [colorClass systemGreenColor];
157157
}
158158

159-
+ (NSObject *)systemTealColorWithSystem:(BOOL)system {
159+
+ (NSObject *)systemTealColorWithSystem:(OpenSwiftUICoreSystem)system {
160160
Class colorClass = OpenSwiftUICoreColorClass(system);
161161
return [colorClass systemTealColor];
162162
}
163163

164-
+ (NSObject *)systemMintColorWithSystem:(BOOL)system {
164+
+ (NSObject *)systemMintColorWithSystem:(OpenSwiftUICoreSystem)system {
165165
Class colorClass = OpenSwiftUICoreColorClass(system);
166166
return [colorClass systemMintColor];
167167
}
168168

169-
+ (NSObject *)systemCyanColorWithSystem:(BOOL)system {
169+
+ (NSObject *)systemCyanColorWithSystem:(OpenSwiftUICoreSystem)system {
170170
Class colorClass = OpenSwiftUICoreColorClass(system);
171171
return [colorClass systemCyanColor];
172172
}
173173

174-
+ (NSObject *)systemBlueColorWithSystem:(BOOL)system {
174+
+ (NSObject *)systemBlueColorWithSystem:(OpenSwiftUICoreSystem)system {
175175
Class colorClass = OpenSwiftUICoreColorClass(system);
176176
return [colorClass systemBlueColor];
177177
}
178178

179-
+ (NSObject *)systemIndigoColorWithSystem:(BOOL)system {
179+
+ (NSObject *)systemIndigoColorWithSystem:(OpenSwiftUICoreSystem)system {
180180
Class colorClass = OpenSwiftUICoreColorClass(system);
181181
return [colorClass systemIndigoColor];
182182
}
183183

184-
+ (NSObject *)systemPurpleColorWithSystem:(BOOL)system {
184+
+ (NSObject *)systemPurpleColorWithSystem:(OpenSwiftUICoreSystem)system {
185185
Class colorClass = OpenSwiftUICoreColorClass(system);
186186
return [colorClass systemPurpleColor];
187187
}
188188

189-
+ (NSObject *)systemPinkColorWithSystem:(BOOL)system {
189+
+ (NSObject *)systemPinkColorWithSystem:(OpenSwiftUICoreSystem)system {
190190
Class colorClass = OpenSwiftUICoreColorClass(system);
191191
return [colorClass systemPinkColor];
192192
}
193193

194-
+ (NSObject *)systemBrownColorWithSystem:(BOOL)system {
194+
+ (NSObject *)systemBrownColorWithSystem:(OpenSwiftUICoreSystem)system {
195195
Class colorClass = OpenSwiftUICoreColorClass(system);
196196
return [colorClass systemBrownColor];
197197
}
198198

199-
+ (NSObject *)systemGrayColorWithSystem:(BOOL)system {
199+
+ (NSObject *)systemGrayColorWithSystem:(OpenSwiftUICoreSystem)system {
200200
Class colorClass = OpenSwiftUICoreColorClass(system);
201201
return [colorClass systemGrayColor];
202202
}

Sources/OpenSwiftUI_SPI/Overlay/CoreGraphics/OpenSwiftUICoreGraphicsContext.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
OPENSWIFTUI_ASSUME_NONNULL_BEGIN
1818

19+
OPENSWIFTUI_SWIFT_NAME(CoreGraphicsContext)
1920
@interface OpenSwiftUICoreGraphicsContext : NSObject
2021

2122
@property (class, nonatomic, readonly) OpenSwiftUICoreGraphicsContext *current;

Sources/OpenSwiftUI_SPI/Overlay/CoreGraphics/OpenSwiftUICoreGraphicsContext.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// OpenSwiftUI_SPI
44
//
55
// Audited for RELEASE_2024
6-
// Status: WIP
6+
// Status: Complete
77

88
#include "OpenSwiftUICoreGraphicsContext.h"
99

0 commit comments

Comments
 (0)