56 lines
1.6 KiB
Swift
56 lines
1.6 KiB
Swift
//
|
||
// DefaultCameraScreen+CaptureButton.swift of MijickCamera
|
||
//
|
||
// Created by Tomasz Kurylik. Sending ❤️ from Kraków!
|
||
// - Mail: tomasz.kurylik@mijick.com
|
||
// - GitHub: https://github.com/FulcrumOne
|
||
// - Medium: https://medium.com/@mijick
|
||
//
|
||
// Copyright ©2024 Mijick. All rights reserved.
|
||
|
||
|
||
import SwiftUI
|
||
|
||
extension DefaultCameraScreen { struct CaptureButton: View {
|
||
let outputType: CameraOutputType
|
||
let isRecording: Bool
|
||
let action: () -> ()
|
||
|
||
|
||
var body: some View {
|
||
Button(action: action, label: createButtonLabel).buttonStyle(ButtonScaleStyle())
|
||
}
|
||
}}
|
||
private extension DefaultCameraScreen.CaptureButton {
|
||
func createButtonLabel() -> some View {
|
||
ZStack {
|
||
createBackground()
|
||
createBorders()
|
||
}.frame(width: 72, height: 72)
|
||
}
|
||
}
|
||
private extension DefaultCameraScreen.CaptureButton {
|
||
func createBackground() -> some View {
|
||
RoundedRectangle(cornerRadius: backgroundCornerRadius, style: .continuous)
|
||
.fill(backgroundColor)
|
||
.padding(backgroundPadding)
|
||
}
|
||
func createBorders() -> some View {
|
||
Circle().stroke(Color(.mijickBackgroundInverted), lineWidth: 2.5)
|
||
}
|
||
}
|
||
private extension DefaultCameraScreen.CaptureButton {
|
||
var backgroundColor: Color { switch outputType {
|
||
case .photo: .init(.mijickBackgroundInverted)
|
||
case .video: .init(.mijickBackgroundRed)
|
||
}}
|
||
var backgroundCornerRadius: CGFloat { switch isRecording {
|
||
case true: 6
|
||
case false: 36
|
||
}}
|
||
var backgroundPadding: CGFloat { switch isRecording {
|
||
case true: 20
|
||
case false: 4
|
||
}}
|
||
}
|