mirror of https://github.com/lukechilds/damus.git
Browse Source
Changelog-Added: Add QRCode view for sharing your pubkey Closes: #418translations_damus-localizations-en-us-xcloc-localized-contents-en-us-xliff--master_ar
committed by
William Casarin
3 changed files with 122 additions and 11 deletions
@ -0,0 +1,90 @@ |
|||||
|
// |
||||
|
// QRCodeView.swift |
||||
|
// damus |
||||
|
// |
||||
|
// Created by eric on 1/27/23. |
||||
|
// |
||||
|
|
||||
|
import SwiftUI |
||||
|
import CoreImage.CIFilterBuiltins |
||||
|
|
||||
|
struct QRCodeView: View { |
||||
|
let damus_state: DamusState |
||||
|
|
||||
|
@Environment(\.dismiss) var dismiss |
||||
|
@Environment(\.presentationMode) var presentationMode |
||||
|
|
||||
|
var maybe_key: String? { |
||||
|
guard let key = bech32_pubkey(damus_state.pubkey) else { |
||||
|
return nil |
||||
|
} |
||||
|
|
||||
|
return key |
||||
|
} |
||||
|
|
||||
|
var body: some View { |
||||
|
ZStack(alignment: .topLeading) { |
||||
|
DamusGradient() |
||||
|
Button { |
||||
|
presentationMode.wrappedValue.dismiss() |
||||
|
} label: { |
||||
|
Image(systemName: "xmark") |
||||
|
.foregroundColor(.white) |
||||
|
.font(.subheadline) |
||||
|
.padding(.leading, 20) |
||||
|
} |
||||
|
.zIndex(1) |
||||
|
|
||||
|
VStack(alignment: .center) { |
||||
|
|
||||
|
Spacer() |
||||
|
|
||||
|
if let key = maybe_key { |
||||
|
Image(uiImage: generateQRCode(pubkey: "nostr:" + key)) |
||||
|
.interpolation(.none) |
||||
|
.resizable() |
||||
|
.scaledToFit() |
||||
|
.frame(width: 200, height: 200) |
||||
|
.padding() |
||||
|
|
||||
|
Text(key) |
||||
|
.font(.headline) |
||||
|
.foregroundColor(Color(.white)) |
||||
|
.padding() |
||||
|
} |
||||
|
|
||||
|
Spacer() |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
.modifier(SwipeToDismissModifier(minDistance: nil, onDismiss: { |
||||
|
presentationMode.wrappedValue.dismiss() |
||||
|
})) |
||||
|
} |
||||
|
|
||||
|
func generateQRCode(pubkey: String) -> UIImage { |
||||
|
let data = pubkey.data(using: String.Encoding.ascii) |
||||
|
let qrFilter = CIFilter(name: "CIQRCodeGenerator") |
||||
|
qrFilter?.setValue(data, forKey: "inputMessage") |
||||
|
let qrImage = qrFilter?.outputImage |
||||
|
|
||||
|
let colorInvertFilter = CIFilter(name: "CIColorInvert") |
||||
|
colorInvertFilter?.setValue(qrImage, forKey: "inputImage") |
||||
|
let outputInvertedImage = colorInvertFilter?.outputImage |
||||
|
|
||||
|
let maskToAlphaFilter = CIFilter(name: "CIMaskToAlpha") |
||||
|
maskToAlphaFilter?.setValue(outputInvertedImage, forKey: "inputImage") |
||||
|
let outputCIImage = maskToAlphaFilter?.outputImage |
||||
|
|
||||
|
let context = CIContext() |
||||
|
let cgImage = context.createCGImage(outputCIImage!, from: outputCIImage!.extent)! |
||||
|
return UIImage(cgImage: cgImage) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
struct QRCodeView_Previews: PreviewProvider { |
||||
|
static var previews: some View { |
||||
|
QRCodeView(damus_state: test_damus_state()) |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue