diff options
Diffstat (limited to 'Map/MapRenderComponents/MapVertices.swift')
| -rw-r--r-- | Map/MapRenderComponents/MapVertices.swift | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Map/MapRenderComponents/MapVertices.swift b/Map/MapRenderComponents/MapVertices.swift new file mode 100644 index 0000000..71f85be --- /dev/null +++ b/Map/MapRenderComponents/MapVertices.swift @@ -0,0 +1,49 @@ +import SwiftUI + +struct MapVertices: View { + + @Environment(\.colorScheme) var colorScheme + + let mapSize: CGSize + let vertexSize: CGSize + let vertices: [Vertex] + let padding = CGFloat(4.0) + + var color: MapColor { + MapColor.colorForScheme(colorScheme) + } + + var body: some View { + ForEach(vertices, id: \.id) { vertex in + Path { path in + path.addEllipse( + in: CGRect( + origin: CGPoint(x: w(vertex.position.x), y: h(vertex.position.y)), size: vertexSize + )) + }.fill(color.foreground) + Text(vertex.label).foregroundColor(color.secondary).offset( + CGSize( + width: w(vertex.position.x) + vertexSize.width + padding, + height: h(vertex.position.y))) + } + } + + func h(_ dimension: CGFloat) -> CGFloat { + max(0.0, min(mapSize.height, dimension * mapSize.height / 100.0)) + } + + func w(_ dimension: CGFloat) -> CGFloat { + max(0.0, min(mapSize.width, dimension * mapSize.width / 100.0)) + } +} + +struct MapVertices_Previews: PreviewProvider { + static var previews: some View { + MapVertices( + mapSize: CGSize(width: 400.0, height: 400.0), vertexSize: CGSize(width: 25.0, height: 25.0), + vertices: [ + Vertex(id: 0, label: "A", position: CGPoint(x: 50.0, y: 50.0)), + Vertex(id: 0, label: "A", position: CGPoint(x: 10.0, y: 20.0)), + ]) + } +} |