Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/SignalServiceKit/QRCodes/QRCodeColor.swift
1 views
//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

public import UIKit

/// Preset color options for styled QR codes.
public enum QRCodeColor: String, UnknownEnumCodable, CaseIterable {
    case blue
    case white
    case grey
    case olive
    case green
    case orange
    case pink
    case purple

    public static var unknown: QRCodeColor { .blue }

    /// Background color for the QR code.
    public var background: UIColor {
        switch self {
        case .blue:
            return UIColor(rgbHex: 0x506ECD)
        case .white:
            return .white
        case .grey:
            return UIColor(rgbHex: 0x6A6C74)
        case .olive:
            return UIColor(rgbHex: 0xA89D7F)
        case .green:
            return UIColor(rgbHex: 0x829A6E)
        case .orange:
            return UIColor(rgbHex: 0xDE7134)
        case .pink:
            return UIColor(rgbHex: 0xE67899)
        case .purple:
            return UIColor(rgbHex: 0x9C84CF)
        }
    }

    /// Foreground color for the QR code.
    public var foreground: UIColor {
        switch self {
        case .blue:
            return UIColor(rgbHex: 0x2449C0)
        case .white:
            return .black
        case .grey:
            return UIColor(rgbHex: 0x464852)
        case .olive:
            return UIColor(rgbHex: 0x73694F)
        case .green:
            return UIColor(rgbHex: 0x55733F)
        case .orange:
            return UIColor(rgbHex: 0xD96B2D)
        case .pink:
            return UIColor(rgbHex: 0xBB617B)
        case .purple:
            return UIColor(rgbHex: 0x7651C5)
        }
    }

    /// Background color for the QR code share image.
    public var canvas: UIColor {
        switch self {
        case .blue:
            return UIColor(rgbHex: 0xEDF0FA)
        case .white:
            return UIColor(rgbHex: 0xF5F5F5)
        case .grey:
            return UIColor(rgbHex: 0xF0F0F1)
        case .olive:
            return UIColor(rgbHex: 0xF6F5F2)
        case .green:
            return UIColor(rgbHex: 0xF2F5F0)
        case .orange:
            return UIColor(rgbHex: 0xFCF1EB)
        case .pink:
            return UIColor(rgbHex: 0xFCF1F5)
        case .purple:
            return UIColor(rgbHex: 0xF5F3FA)
        }
    }

    /// Border color for the padding around the QR code.
    public var paddingBorder: UIColor {
        switch self {
        case .white:
            return UIColor(rgbHex: 0xE9E9E9)
        default:
            return .clear
        }
    }

    /// Color for the username displayed alongside the QR code.
    public var username: UIColor {
        switch self {
        case .white:
            return .black
        default:
            return .white
        }
    }
}