mirror of
https://github.com/pboulch/luto.git
synced 2025-12-19 12:52:47 +00:00
🎉 first commit
This commit is contained in:
31
Luto/UI/Utils/ViewExtensions.swift
Normal file
31
Luto/UI/Utils/ViewExtensions.swift
Normal file
@ -0,0 +1,31 @@
|
||||
//
|
||||
// ViewExtensions.swift
|
||||
// Luto
|
||||
//
|
||||
// Created by Pierre Boulc'h on 12/07/2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension View {
|
||||
func border(width: CGFloat, edges: [Edge], color: Color) -> some View {
|
||||
overlay(EdgeBorder(width: width, edges: edges).foregroundColor(color))
|
||||
}
|
||||
}
|
||||
|
||||
struct EdgeBorder: Shape {
|
||||
var width: CGFloat
|
||||
var edges: [Edge]
|
||||
|
||||
func path(in rect: CGRect) -> Path {
|
||||
edges.map { edge -> Path in
|
||||
switch edge {
|
||||
case .top: return Path(.init(x: rect.minX, y: rect.minY, width: rect.width, height: width))
|
||||
case .bottom: return Path(.init(x: rect.minX, y: rect.maxY - width, width: rect.width, height: width))
|
||||
case .leading: return Path(.init(x: rect.minX, y: rect.minY, width: width, height: rect.height))
|
||||
case .trailing: return Path(.init(x: rect.maxX - width, y: rect.minY, width: width, height: rect.height))
|
||||
}
|
||||
}.reduce(into: Path()) { $0.addPath($1) }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user