taler-ios

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

WalletColors.swift (3688B)


      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                           scheme: ColorScheme,
     37                         contrast: ColorSchemeContrast,
     38                        prominent: Bool = false) -> Color {
     39             disabled ? gray2
     40         : !prominent ? talerColor
     41         : scheme == .dark ? primary(contrast)
     42            : pressed ? gray6 : Color.white
     43     }
     44 
     45     func buttonBackColor(pressed: Bool,
     46                         disabled: Bool,
     47                        prominent: Bool = false) -> Color {
     48             disabled ? gray7
     49          : prominent ? talerColor
     50            : pressed ? gray4 : gray5
     51     }
     52 
     53     func primary(_ contrast: ColorSchemeContrast = .standard) -> Color {
     54         return contrast == .increased ? .primary
     55                                       : Color("Primary")
     56     }
     57 
     58     func secondary(_ scheme: ColorScheme, _ contrast: ColorSchemeContrast = .standard) -> Color {
     59         return contrast == .increased ? .primary            // WCAG AAA for any scheme
     60                        : minimalistic ? .secondary          // not enough contrast
     61                     : scheme == .dark ? .secondary          // WCAG AA for dark scheme
     62                                       : Color(.darkGray)    // WCAG AA for light scheme
     63     }
     64 
     65     var labelColor: Color {
     66         Color(UIColor.label)
     67     }
     68 
     69     var backgroundColor: Color {
     70         grouped ? Color(.systemGroupedBackground)
     71                 : Color(.systemBackground)
     72     }
     73 
     74     var secondaryBackground: Color {
     75         Color(.secondarySystemGroupedBackground)
     76     }
     77 
     78     var sideBackground: Color {
     79         gray6
     80     }
     81 
     82     func pickerSelected(_ scheme: ColorScheme, _ contrast: ColorSchemeContrast) -> Color {
     83         return contrast == .increased ? (scheme == .dark ? gray3 : gray4)
     84                                       : (scheme == .dark ? gray4 : gray5)
     85     }
     86 
     87     var pickerBackground: Color {
     88         gray7
     89     }
     90 
     91     var fieldForeground: Color {              // text color
     92         Color.primary
     93     }
     94 
     95     var fieldBackground: Color {
     96         gray8
     97     }
     98 
     99     var uncompletedColor: Color {
    100         // used in TransactionRowView
    101         gray1
    102     }
    103 
    104     var errorColor: Color {
    105         Color("Error")
    106     }
    107 
    108     var talerColor: Color {
    109         Color("Taler")
    110     }
    111 
    112     func pendingColor(_ incoming: Bool) -> Color {
    113         incoming ? Color("PendingIncoming")
    114                  : Color("PendingOutgoing")
    115     }
    116 
    117     func transactionColor(_ incoming: Bool) -> Color {
    118         incoming ? Color("Incoming")
    119                  : Color("Outgoing")
    120     }
    121 }