mirror of
https://github.com/neon443/NearFuture.git
synced 2026-03-11 06:49:12 +00:00
84 lines
1.6 KiB
Swift
84 lines
1.6 KiB
Swift
//
|
|
// ColorCodable.swift
|
|
// NearFuture
|
|
//
|
|
// Created by neon443 on 13/06/2025.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
#if canImport(UIKit)
|
|
import UIKit
|
|
#else
|
|
import AppKit
|
|
#endif
|
|
|
|
struct ColorCodable: Codable, Equatable, Hashable {
|
|
init(_ color: Color) {
|
|
var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 1
|
|
|
|
#if canImport(UIKit)
|
|
let uiColor = UIColor(color)
|
|
uiColor.getRed(&r, green: &g, blue: &b, alpha: &a)
|
|
#elseif canImport(AppKit)
|
|
let nscolor = NSColor(color).usingColorSpace(.deviceRGB)
|
|
nscolor!.getRed(&r, green: &g, blue: &b, alpha: &a)
|
|
#endif
|
|
|
|
self = ColorCodable(
|
|
red: r,
|
|
green: g,
|
|
blue: b
|
|
)
|
|
}
|
|
#if canImport(UIKit)
|
|
init(uiColor: UIColor) {
|
|
var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 1.0
|
|
uiColor.getRed(&r, green: &g, blue: &b, alpha: &a)
|
|
self = ColorCodable(
|
|
red: r,
|
|
green: g,
|
|
blue: b
|
|
)
|
|
}
|
|
#elseif canImport(AppKit)
|
|
init(nsColor: NSColor) {
|
|
var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 1.0
|
|
let nsColor = nsColor.usingColorSpace(.deviceRGB)
|
|
nsColor!.getRed(&r, green: &g, blue: &b, alpha: &a)
|
|
self = ColorCodable(
|
|
red: r,
|
|
green: g,
|
|
blue: b
|
|
)
|
|
}
|
|
#endif
|
|
init(red: Double, green: Double, blue: Double) {
|
|
self.red = red
|
|
self.green = green
|
|
self.blue = blue
|
|
}
|
|
|
|
var red: Double
|
|
var green: Double
|
|
var blue: Double
|
|
|
|
var color: Color {
|
|
Color(red: red, green: green, blue: blue)
|
|
}
|
|
var colorBind: Color {
|
|
get {
|
|
return Color(
|
|
red: red,
|
|
green: green,
|
|
blue: blue
|
|
)
|
|
} set {
|
|
let cc = ColorCodable(newValue)
|
|
self.red = cc.red
|
|
self.green = cc.green
|
|
self.blue = cc.blue
|
|
}
|
|
}
|
|
}
|