damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

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 }