1 contributor
//
// ChargedDeviceQRCodeView.swift
// USB Meter
//
// Created by Codex on 10/04/2026.
//
import CoreImage.CIFilterBuiltins
import SwiftUI
struct ChargedDeviceQRCodeView: View {
let qrIdentifier: String
let side: CGFloat
private let context = CIContext()
private let filter = CIFilter.qrCodeGenerator()
var body: some View {
Group {
if let image = qrImage {
Image(uiImage: image)
.interpolation(.none)
.resizable()
.scaledToFit()
} else {
RoundedRectangle(cornerRadius: 14)
.fill(Color.secondary.opacity(0.12))
.overlay(
Image(systemName: "qrcode")
.font(.system(size: side * 0.34, weight: .semibold))
.foregroundColor(.secondary)
)
}
}
.frame(width: side, height: side)
.padding(8)
.background(
RoundedRectangle(cornerRadius: 18)
.fill(Color.white.opacity(0.92))
)
}
private var qrImage: UIImage? {
filter.setValue(Data(qrIdentifier.utf8), forKey: "inputMessage")
filter.correctionLevel = "M"
guard let outputImage = filter.outputImage else {
return nil
}
let transform = CGAffineTransform(scaleX: 12, y: 12)
let scaledImage = outputImage.transformed(by: transform)
guard let cgImage = context.createCGImage(scaledImage, from: scaledImage.extent) else {
return nil
}
return UIImage(cgImage: cgImage)
}
}