NeutralButtonStyle.swift (2734B)
1 // 2 // NeutralButtonStyle.swift 3 // damus 4 // 5 // Created by eric on 9/1/23. 6 // 7 8 import SwiftUI 9 10 enum NeutralButtonShape { 11 case rounded, capsule, circle 12 13 var style: NeutralButtonStyle { 14 switch self { 15 case .rounded: 16 return NeutralButtonStyle(padding: EdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10), cornerRadius: 12) 17 case .capsule: 18 return NeutralButtonStyle(padding: EdgeInsets(top: 5, leading: 15, bottom: 5, trailing: 15), cornerRadius: 20) 19 case .circle: 20 return NeutralButtonStyle(padding: EdgeInsets(top: 20, leading: 20, bottom: 20, trailing: 20), cornerRadius: 9999) 21 } 22 } 23 } 24 25 struct NeutralButtonStyle: ButtonStyle { 26 let padding: EdgeInsets 27 let cornerRadius: CGFloat 28 let scaleEffect: CGFloat 29 30 init(padding: EdgeInsets = EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0), cornerRadius: CGFloat = 15, scaleEffect: CGFloat = 0.95) { 31 self.padding = padding 32 self.cornerRadius = cornerRadius 33 self.scaleEffect = scaleEffect 34 } 35 36 func makeBody(configuration: Configuration) -> some View { 37 configuration.label 38 .padding(padding) 39 .background(DamusColors.neutral1) 40 .cornerRadius(cornerRadius) 41 .overlay( 42 RoundedRectangle(cornerRadius: cornerRadius) 43 .stroke(DamusColors.neutral3, lineWidth: 1) 44 ) 45 .scaleEffect(configuration.isPressed ? scaleEffect : 1) 46 } 47 } 48 49 struct NeutralButtonStyle_Previews: PreviewProvider { 50 static var previews: some View { 51 VStack { 52 53 Button(action: { 54 print("dynamic size") 55 }) { 56 Text(verbatim: "Dynamic Size") 57 .padding() 58 } 59 .buttonStyle(NeutralButtonStyle()) 60 61 Button(action: { 62 print("infinite width") 63 }) { 64 HStack { 65 Text(verbatim: "Infinite Width") 66 .padding() 67 } 68 .frame(minWidth: 300, maxWidth: .infinity, alignment: .center) 69 } 70 .buttonStyle(NeutralButtonStyle()) 71 .padding() 72 73 Button(String(stringLiteral: "Rounded Button"), action: {}) 74 .buttonStyle(NeutralButtonShape.rounded.style) 75 .padding() 76 77 Button(String(stringLiteral: "Capsule Button"), action: {}) 78 .buttonStyle(NeutralButtonShape.capsule.style) 79 .padding() 80 81 Button(action: {}, label: {Image("messages")}) 82 .buttonStyle(NeutralButtonShape.circle.style) 83 } 84 } 85 }