Meshtastic-Apple/Meshtastic/Views/Map/Custom/MapButtons.swift

68 lines
1.7 KiB
Swift
Raw Normal View History

//
// MapButtons.swift
// Meshtastic
//
// Copyright © Garth Vander Houwen 4/23/23.
//
import SwiftUI
struct MapButtons: View {
let buttonWidth: CGFloat = 22
let width: CGFloat = 45
@Binding var tracking: UserTrackingModes
@Binding var isPresentingInfoSheet: Bool
var body: some View {
VStack() {
let impactLight = UIImpactFeedbackGenerator(style: .light)
Button(action: {
self.isPresentingInfoSheet.toggle()
}) {
Image(systemName: isPresentingInfoSheet ? "info.circle.fill" : "info.circle")
.resizable()
.frame(width: buttonWidth, height: buttonWidth, alignment: .center)
.offset(y: -2)
}
Divider()
Button(action: {
switch self.tracking {
case .none:
self.tracking = .follow
case .follow:
self.tracking = .followWithHeading
case .followWithHeading:
self.tracking = .none
}
impactLight.impactOccurred()
}) {
Image(systemName: tracking.icon)
.frame(width: buttonWidth, height: buttonWidth, alignment: .center)
.offset(y: 3)
}
}
.frame(width: width, height: width*2, alignment: .center)
.background(Color(UIColor.systemBackground))
.cornerRadius(8)
.shadow(radius: 1)
2023-04-25 23:10:08 -07:00
.offset(x: 3, y: 25)
}
}
// MARK: Previews
struct MapControl_Previews: PreviewProvider {
@State static var tracking: UserTrackingModes = .none
@State static var isPresentingInfoSheet = false
static var previews: some View {
Group {
MapButtons(tracking: $tracking, isPresentingInfoSheet: $isPresentingInfoSheet)
.environment(\.colorScheme, .light)
MapButtons(tracking: $tracking, isPresentingInfoSheet: $isPresentingInfoSheet)
.environment(\.colorScheme, .dark)
}
.previewLayout(.fixed(width: 60, height: 100))
}
}