taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

WalletColors.swift (3342B)


      1 /*
      2  * This file is part of GNU Taler, ©2022-25 Taler Systems S.A.
      3  * See LICENSE.md
      4  */
      5 /**
      6  * @author Marc Stibane
      7  */
      8 import SwiftUI
      9 
     10 fileprivate let grouped = true
     11 
     12 public struct WalletColors {
     13     @AppStorage("minimalistic") var minimalistic: Bool = false
     14 
     15 //    let tint = Color(.tintColor)
     16     let gray1 = Color(.systemGray)          // uncompleted
     17     let gray2 = Color(.systemGray2)         // disabled Fore
     18     let gray3 = Color(.systemGray3)
     19     let gray4 = Color(.systemGray4)
     20     let gray5 = Color(.systemGray5)
     21     let gray6 = Color(.systemGray6)
     22     let gray7 = grouped ? Color(.tertiarySystemGroupedBackground)
     23                         : Color(.tertiarySystemBackground)        // enabled Back
     24     let gray8 = grouped ? Color(.secondarySystemGroupedBackground)
     25                         : Color(.secondarySystemBackground)       // disabled Back
     26 
     27     let attention = Color.red       // TODO: WalletColors().errorColor
     28     let confirm = Color.yellow      // TODO: WalletColors().warningColor
     29 
     30     // TODO: In Japan, negative is blue, and positive is red
     31     let positive = Color.green
     32     let negative = Color.red
     33 
     34     func buttonForeColor(pressed: Bool,
     35                         disabled: Bool,
     36                        prominent: Bool = false) -> Color {
     37             disabled ? gray2
     38         : !prominent ? talerColor
     39            : pressed ? gray6 : Color.white
     40     }
     41 
     42     func buttonBackColor(pressed: Bool,
     43                         disabled: Bool,
     44                        prominent: Bool = false) -> Color {
     45             disabled ? gray7
     46          : prominent ? talerColor
     47            : pressed ? gray4 : gray5
     48     }
     49 
     50     func secondary(_ scheme: ColorScheme, _ contrast: ColorSchemeContrast) -> Color {
     51         return contrast == .increased ? .primary            // WCAG AAA for any scheme
     52                        : minimalistic ? .secondary          // not enough contrast
     53                     : scheme == .dark ? .secondary          // WCAG AA for dark scheme
     54                                       : Color(.darkGray)    // WCAG AA for light scheme
     55     }
     56 
     57     var labelColor: Color {
     58         Color(UIColor.label)
     59     }
     60 
     61     var backgroundColor: Color {
     62         grouped ? Color(.systemGroupedBackground)
     63                 : Color(.systemBackground)
     64     }
     65 
     66     var secondaryBackground: Color {
     67         Color(.secondarySystemGroupedBackground)
     68     }
     69 
     70     var sideBackground: Color {
     71         gray6
     72     }
     73 
     74     func pickerSelected(_ scheme: ColorScheme, _ contrast: ColorSchemeContrast) -> Color {
     75         return contrast == .increased ? (scheme == .dark ? gray3 : gray4)
     76                                       : (scheme == .dark ? gray4 : gray5)
     77     }
     78 
     79     var pickerBackground: Color {
     80         gray7
     81     }
     82 
     83     var fieldForeground: Color {              // text color
     84         Color.primary
     85     }
     86 
     87     var fieldBackground: Color {
     88         gray8
     89     }
     90 
     91     var uncompletedColor: Color {
     92         // used in TransactionRowView
     93         gray1
     94     }
     95 
     96     var errorColor: Color {
     97         Color("Error")
     98     }
     99 
    100     var talerColor: Color {
    101         Color("Taler")
    102     }
    103 
    104     func pendingColor(_ incoming: Bool) -> Color {
    105         incoming ? Color("PendingIncoming")
    106                  : Color("PendingOutgoing")
    107     }
    108 
    109     func transactionColor(_ incoming: Bool) -> Color {
    110         incoming ? Color("Incoming")
    111                  : Color("Outgoing")
    112     }
    113 }