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
11 changes: 6 additions & 5 deletions Sources/OpenSwiftUICore/Graphic/Color/CoreColor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@
// CoreColor.swift
// OpenSwiftUICore
//
// Audited for 6.4.41
// Status: Complete
// ID: 4330A474F53D66045762501ED6F8A749 (SwiftUICore)

#if canImport(Darwin)
package import Foundation
import OpenSwiftUI_SPI

// MARK: - Color.Resolved + PlatformColor [6.4.41]
// MARK: - Color.Resolved + PlatformColor

extension Color.Resolved {
package init?(platformColor: AnyObject) {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
let result = CoreColorPlatformColorGetComponents(system: .defaults, color: platformColor, red: &red, green: &green, blue: &blue, alpha: &alpha)
let result = CoreColorPlatformColorGetComponents(system: .default, color: platformColor, red: &red, green: &green, blue: &blue, alpha: &alpha)
if result {
self.init(colorSpace: .sRGB, red: Float(red), green: Float(green), blue: Float(blue), opacity: Float(alpha))
} else {
Expand All @@ -34,22 +35,22 @@ extension Color.Resolved {
}
}

// MARK: - CoreColor + PlatformColor [6.4.41]
// MARK: - CoreColor + PlatformColor

extension CoreColor {
package static func platformColor(resolvedColor: Color.Resolved) -> NSObject? {
platformColor(red: CGFloat(resolvedColor.red), green: CGFloat(resolvedColor.green), blue: CGFloat(resolvedColor.blue), alpha: CGFloat(resolvedColor.opacity))
}

package static func platformColor(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) -> NSObject? {
CorePlatformColorForRGBA(system: .defaults, red: red, green: green, blue: blue, alpha: alpha) as? NSObject
CorePlatformColorForRGBA(system: .default, red: red, green: green, blue: blue, alpha: alpha) as? NSObject
}
}

#if OPENSWIFTUI_LINK_COREUI
package import CoreUI

// MARK: - CoreUINamedColorProvider [6.4.41]
// MARK: - CoreUINamedColorProvider

package protocol CoreUINamedColorProvider {
static func effectiveCGColor(cuiColor: CUINamedColor, in environment: EnvironmentValues) -> CGColor?
Expand Down
26 changes: 13 additions & 13 deletions Sources/OpenSwiftUICore/Graphic/Color/SystemColors.swift
Original file line number Diff line number Diff line change
Expand Up @@ -206,19 +206,19 @@ package enum SystemColorType: ColorProvider {
package var kitColor: AnyObject? {
#if canImport(Darwin)
switch self {
case .red: CoreColor.systemRedColor(with: .defaults)
case .orange: CoreColor.systemOrangeColor(with: .defaults)
case .yellow: CoreColor.systemYellowColor(with: .defaults)
case .green: CoreColor.systemGreenColor(with: .defaults)
case .teal: CoreColor.systemTealColor(with: .defaults)
case .mint: CoreColor.systemMintColor(with: .defaults)
case .cyan: CoreColor.systemCyanColor(with: .defaults)
case .blue: CoreColor.systemBlueColor(with: .defaults)
case .indigo: CoreColor.systemIndigoColor(with: .defaults)
case .purple: CoreColor.systemPurpleColor(with: .defaults)
case .pink: CoreColor.systemPinkColor(with: .defaults)
case .brown: CoreColor.systemBrownColor(with: .defaults)
case .gray: CoreColor.systemGrayColor(with: .defaults)
case .red: CoreColor.systemRedColor(with: .default)
case .orange: CoreColor.systemOrangeColor(with: .default)
case .yellow: CoreColor.systemYellowColor(with: .default)
case .green: CoreColor.systemGreenColor(with: .default)
case .teal: CoreColor.systemTealColor(with: .default)
case .mint: CoreColor.systemMintColor(with: .default)
case .cyan: CoreColor.systemCyanColor(with: .default)
case .blue: CoreColor.systemBlueColor(with: .default)
case .indigo: CoreColor.systemIndigoColor(with: .default)
case .purple: CoreColor.systemPurpleColor(with: .default)
case .pink: CoreColor.systemPinkColor(with: .default)
case .brown: CoreColor.systemBrownColor(with: .default)
case .gray: CoreColor.systemGrayColor(with: .default)
default: nil
}
#else
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
//
// UIUtils.swift
// CoreSystemUtils.swift
// OpenSwiftUICore
//
// Audited for 6.5.4
// Status: WIP
// Status: Complete

import OpenSwiftUI_SPI
package import OpenSwiftUI_SPI

// NOTE: use runtime check instead of #if targetEnvironment(macCatalyst)
// Because Mac Catalyst will use macOS-varient build of OpenSwiftUICore.framework and Mac Catalyst/UIKitForMac varient of OpenSwiftUI.framework
Expand Down Expand Up @@ -40,5 +40,11 @@ package func isAppKitBased() -> Bool {

extension CoreSystem {
@inline(__always)
static var defaults: CoreSystem = isAppKitBased() ? .appKit : .uiKit
package static var `default`: CoreSystem {
#if canImport(Darwin)
isAppKitBased() ? .appKit : .uiKit
#else
.unknown
#endif
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// OpenSwiftUICoreSystem.h
// OpenSwiftUI_SPI
//
// Audited for iOS 18.0
// Audited for 6.5.4
// Status: Complete

#ifndef OpenSwiftUICoreSystem_h
Expand All @@ -11,8 +11,14 @@
#include "OpenSwiftUIBase.h"

typedef OPENSWIFTUI_ENUM(uint8_t, OpenSwiftUICoreSystem) {
/// UIKit based system (iOS, visionOS, Mac Catalyst)
OpenSwiftUICoreSystemUIKit,

/// AppKit based system (macOS)
OpenSwiftUICoreSystemAppKit,

/// Placeholder for unsupported platforms (eg. Linux)
OpenSwiftUICoreSystemUnknown,
} OPENSWIFTUI_SWIFT_NAME(CoreSystem);

#endif /* OpenSwiftUICoreSystem_h */
34 changes: 34 additions & 0 deletions Tests/OpenSwiftUICoreTests/Util/CoreSystemUtilsTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
//
// CoreSystemUtilsTests.swift
// OpenSwiftUICoreTests

import OpenSwiftUICore
import OpenSwiftUI_SPI
import Testing

struct CoreSystemUtilsTests {
@Test
func frameworkConditionCheck() {
#if targetEnvironment(macCatalyst)
#expect(isCatalyst() == true)
#expect(isUIKitBased() == true)
#expect(isAppKitBased() == false)
#expect(CoreSystem.default == .uiKit)
#elseif os(macOS)
#expect(isCatalyst() == false)
#expect(isUIKitBased() == false)
#expect(isAppKitBased() == true)
#expect(CoreSystem.default == .appKit)
#elseif os(iOS) || os(visionOS)
#expect(isCatalyst() == false)
#expect(isUIKitBased() == true)
#expect(isAppKitBased() == false)
#expect(CoreSystem.default == .uiKit)
#else
#expect(isCatalyst() == false)
#expect(isUIKitBased() == false)
#expect(isAppKitBased() == false)
#expect(CoreSystem.default == .unknown)
#endif
}
}
6 changes: 1 addition & 5 deletions Tests/OpenSwiftUICoreTests/Util/DebuggerTests.swift
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
//
// DebuggerTests.swift
// OpenSwiftUICoreTests
//
// Audited for 6.5.4
// Status: Complete
//

import OpenSwiftUICore
import Testing
@testable import OpenSwiftUICore

struct DebuggerTests {
@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,17 @@ struct CoreColorTests {
var g: CGFloat = 0
var b: CGFloat = 0
var a: CGFloat = 0
#expect(CoreColorPlatformColorGetComponents(system: .defaults, color: blackColor, red: &r, green: &g, blue: &b, alpha: &a) == true)
#expect(CoreColorPlatformColorGetComponents(system: .default, color: blackColor, red: &r, green: &g, blue: &b, alpha: &a) == true)
#expect(r.isApproximatelyEqual(to: 0))
#expect(g.isApproximatelyEqual(to: 0))
#expect(b.isApproximatelyEqual(to: 0))
#expect(a.isApproximatelyEqual(to: 1))
#expect(CoreColorPlatformColorGetComponents(system: .defaults, color: grayColor, red: &r, green: &g, blue: &b, alpha: &a) == true)
#expect(CoreColorPlatformColorGetComponents(system: .default, color: grayColor, red: &r, green: &g, blue: &b, alpha: &a) == true)
#expect(r.isApproximatelyEqual(to: 0.5))
#expect(g.isApproximatelyEqual(to: 0.5))
#expect(b.isApproximatelyEqual(to: 0.5))
#expect(a.isApproximatelyEqual(to: 1))
#expect(CoreColorPlatformColorGetComponents(system: .defaults, color: whiteColor, red: &r, green: &g, blue: &b, alpha: &a) == true)
#expect(CoreColorPlatformColorGetComponents(system: .default, color: whiteColor, red: &r, green: &g, blue: &b, alpha: &a) == true)
#expect(r.isApproximatelyEqual(to: 1))
#expect(g.isApproximatelyEqual(to: 1))
#expect(b.isApproximatelyEqual(to: 1))
Expand All @@ -52,9 +52,9 @@ struct CoreColorTests {

@Test
func platformColorForRGBA() throws {
let blackColorObject = try #require(CorePlatformColorForRGBA(system: .defaults, red: 0, green: 0, blue: 0, alpha: 1))
let greyColorObject = try #require(CorePlatformColorForRGBA(system: .defaults, red: 0.5, green: 0.5, blue: 0.5, alpha: 1))
let whiteColorObject = try #require(CorePlatformColorForRGBA(system: .defaults, red: 1, green: 1, blue: 1, alpha: 1))
let blackColorObject = try #require(CorePlatformColorForRGBA(system: .default, red: 0, green: 0, blue: 0, alpha: 1))
let greyColorObject = try #require(CorePlatformColorForRGBA(system: .default, red: 0.5, green: 0.5, blue: 0.5, alpha: 1))
let whiteColorObject = try #require(CorePlatformColorForRGBA(system: .default, red: 1, green: 1, blue: 1, alpha: 1))
#if os(macOS)
let blackColor = try #require((blackColorObject as? NSColor)?.usingColorSpace(.deviceRGB))
let greyColor = try #require(greyColorObject as? NSColor)
Expand Down Expand Up @@ -98,7 +98,7 @@ struct CoreColorTests {

@Test
func getKitColorClass() {
let colorClass: AnyClass? = CoreColorGetKitColorClass(system: .defaults)
let colorClass: AnyClass? = CoreColorGetKitColorClass(system: .default)
#if os(macOS)
#expect(colorClass == NSColor.self)
#elseif os(iOS)
Expand Down