diff options
Diffstat (limited to 'iosApp/iosApp/Map/MapWrapperView.swift')
-rw-r--r-- | iosApp/iosApp/Map/MapWrapperView.swift | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/iosApp/iosApp/Map/MapWrapperView.swift b/iosApp/iosApp/Map/MapWrapperView.swift new file mode 100644 index 0000000..0e9eaf8 --- /dev/null +++ b/iosApp/iosApp/Map/MapWrapperView.swift @@ -0,0 +1,82 @@ +/** + * TrackerMap + * Copyright (C) 2021-2022 Iván Ávalos <avalos@disroot.org>, Henoch Ojeda <imhenoch@protonmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +import SwiftUI +import Combine +import WhirlyGlobeMaplyComponent +import shared + +struct MapWrapperView: View { + @Binding var layer: MapLayer + @ObservedObject var link: BaseMapLink = BaseMapLink() + + var body: some View { + ZStack { + // MARK: - Map + BaseMapView(mapLayer: $layer, link: link) + + // MARK: - Attribution + VStack { + HyperlinkText(html: layer.attribution) + .font(.footnote) + .lineLimit(3) + .foregroundColor(.label.opacity(0.35)) + .padding(6.0) + .background(.systemBackground.opacity(0.35)) + } + .frame(maxWidth: .infinity, + maxHeight: .infinity, + alignment: .bottom) + .allowsHitTesting(false) + + // MARK: - Controls + VStack { + // MARK: Zoom in + Button { + print ("Zoom in!") + link.zoomIn() + } label: { + Image(systemName: "plus").imageScale(.large) + } + .buttonStyle(ControlButtonStyle()) + + // MARK: Zoom out + Button { + print("Zoom out!") + link.zoomOut() + } label: { + Image(systemName: "minus").imageScale(.large) + } + .buttonStyle(ControlButtonStyle()) + } + .frame(maxWidth: .infinity, + maxHeight: .infinity, + alignment: .topTrailing) + .padding() + } + } +} + +struct ControlButtonStyle: ButtonStyle { + func makeBody(configuration: Configuration) -> some View { + configuration.label + .frame(width: 50, height: 50) + .foregroundColor(configuration.isPressed ? .secondary : .primary) + .background(configuration.isPressed ? .secondarySystemBackground : .systemBackground) + .clipShape(Circle()) + } +} |