Bitwarden-app-android-iphon.../src/watchOS/bitwarden/bitwarden WatchKit Extension/Utilities/ColorUtils.swift

62 lines
1.8 KiB
Swift

import SwiftUI
extension Color {
static let ui = Color.UI()
struct UI {
let primary = Color(hex: "#175DDC")
let itemBackground = Color("ItemBackground")
let darkTextMuted = Color("DarkTextMuted")
let avatarItemBackground = Color("AvatarItemBackground")
}
init?(hex: String) {
var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines)
hexSanitized = hexSanitized.replacingOccurrences(of: "#", with: "")
var rgb: UInt64 = 0
var r: CGFloat = 0.0
var g: CGFloat = 0.0
var b: CGFloat = 0.0
var a: CGFloat = 1.0
guard Scanner(string: hexSanitized).scanHexInt64(&rgb) else{
return nil
}
switch hexSanitized.count {
case 3:
r = CGFloat((rgb >> 8) * 17) / 255.0
g = CGFloat((rgb >> 4 & 0xF) * 17) / 255.0
b = CGFloat((rgb & 0xF) * 17) / 255.0
case 6:
r = CGFloat((rgb & 0xFF0000) >> 16) / 255.0
g = CGFloat((rgb & 0x00FF00) >> 8) / 255.0
b = CGFloat(rgb & 0x0000FF) / 255.0
case 8:
r = CGFloat((rgb & 0xFF000000) >> 24) / 255.0
g = CGFloat((rgb & 0x00FF0000) >> 16) / 255.0
b = CGFloat((rgb & 0x0000FF00) >> 8) / 255.0
a = CGFloat(rgb & 0x000000FF) / 255.0
default:
return nil
}
self.init(red: r, green: g, blue: b, opacity: a)
}
var components: (red: CGFloat, green: CGFloat, blue: CGFloat, opacity: CGFloat) {
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var o: CGFloat = 0
guard UIColor(self).getRed(&r, green: &g, blue: &b, alpha: &o) else {
return (0, 0, 0, 0)
}
return (r, g, b, o)
}
}