aboutsummaryrefslogtreecommitdiff
path: root/iosApp/iosApp/Map/MapWrapperView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'iosApp/iosApp/Map/MapWrapperView.swift')
-rw-r--r--iosApp/iosApp/Map/MapWrapperView.swift82
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())
+ }
+}