taler-ios

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

commit c521342d7615b1ae865b432faffa38effbe4f00c
parent f13f8234424fae2e4fbb88391d3d8f50201f6364
Author: Marc Stibane <marc@taler.net>
Date:   Thu, 31 Aug 2023 21:01:42 +0200

Settings: Font: AtkinsonHyperlegible

Diffstat:
MTalerWallet1/Controllers/Controller.swift | 1+
ATalerWallet1/Helper/Font+Taler.swift | 106+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MTalerWallet1/Views/Settings/SettingsItem.swift | 41+++++++++++++++++++++++++++++++++++++++++
MTalerWallet1/Views/Settings/SettingsView.swift | 2++
4 files changed, 150 insertions(+), 0 deletions(-)

diff --git a/TalerWallet1/Controllers/Controller.swift b/TalerWallet1/Controllers/Controller.swift @@ -33,6 +33,7 @@ class Controller: ObservableObject { @Published var backendState: BackendState = .none // only used for launch animation @AppStorage("playSounds") var playSounds: Int = 0 // extension mustn't define this, so it must be here + @AppStorage("talerFonts") var talerFonts: Int = 0 // extension mustn't define this, so it must be here let logger = Logger (subsystem: "net.taler.gnu", category: "Controller") let player = AVQueuePlayer() diff --git a/TalerWallet1/Helper/Font+Taler.swift b/TalerWallet1/Helper/Font+Taler.swift @@ -0,0 +1,106 @@ +/* + * This file is part of GNU Taler, ©2022-23 Taler Systems S.A. + * See LICENSE.md + */ +import SwiftUI + +// Use enums for multiple font types and functions for the set custom font. + +fileprivate let REGULAR = "AtkinsonHyperlegible-Regular" +fileprivate let ITALIC = "AtkinsonHyperlegible-Italic" +fileprivate let BOLD = "AtkinsonHyperlegible-Bold" +fileprivate let BOLDITALIC = "AtkinsonHyperlegible-BoldItalic" + +extension Font { + enum TalerFont { + case regular + case italic + case bold + case boldItalic + case custom(String) + + var value: String { + switch self { + case .regular: return REGULAR + case .italic: return ITALIC + case .bold: return BOLD + case .boldItalic: return BOLDITALIC + + case .custom(let name): + return name + } + } + } + + static func talerFont(_ type: TalerFont, size: CGFloat = 17) -> Font { + return .custom(type.value, size: size) + } + + static var talerLargeTitle: Font { + Controller.shared.talerFonts == 0 ? .largeTitle : + .custom(REGULAR, size: 38, relativeTo: .largeTitle) + } // 34 -> 38 + static var talerTitle: Font { + Controller.shared.talerFonts == 0 ? .title : + .custom(REGULAR, size: 31, relativeTo: .title) + } // 28 -> 31 + static var talerTitle2: Font { + Controller.shared.talerFonts == 0 ? .title2 : + .custom(REGULAR, size: 25, relativeTo: .title2) + } // 22 -> 25 + static var talerTitle3: Font { + Controller.shared.talerFonts == 0 ? .title3 : + .custom(REGULAR, size: 23, relativeTo: .title3) + } // 20 -> 23 + static var talerHeadline: Font { + Controller.shared.talerFonts == 0 ? .headline : + .custom(BOLD, size: 19, relativeTo: .headline) + } // 17 bold -> 19 bold + static var talerBody: Font { + Controller.shared.talerFonts == 0 ? .body : + .custom(REGULAR, size: 19, relativeTo: .body) + } // 17 -> 19 + static var talerCallout: Font { + Controller.shared.talerFonts == 0 ? .callout : + .custom(REGULAR, size: 18, relativeTo: .callout) + } // 16 -> 18 + static var talerSubheadline: Font { + Controller.shared.talerFonts == 0 ? .subheadline : + .custom(REGULAR, size: 17, relativeTo: .subheadline) + } // 15 -> 17 + static var talerFootnote: Font { + Controller.shared.talerFonts == 0 ? .footnote : + .custom(REGULAR, size: 15, relativeTo: .footnote) + } // 13 -> 15 + static var talerCaption: Font { + Controller.shared.talerFonts == 0 ? .caption : + .custom(REGULAR, size: 13, relativeTo: .caption) + } // 12 -> 13 + static var talerCaption2: Font { + Controller.shared.talerFonts == 0 ? .caption2 : + .custom(REGULAR, size: 12, relativeTo: .caption2) + } // 11 -> 12 +} + +struct ContentViewFonts: View { + var body: some View { + VStack { + Text("Text demo") + .font(.talerFont(.regular)) + Text("Text demo") + .font(.talerFont(.italic)) + Text("Text demo") + .font(.talerFont(.bold)) + Text("Text demo") + .font(.talerFont(.boldItalic)) + + Text("Text demo") + .font(.talerBody) + + } + } +} + +#Preview("Font View") { + ContentViewFonts() +} diff --git a/TalerWallet1/Views/Settings/SettingsItem.swift b/TalerWallet1/Views/Settings/SettingsItem.swift @@ -56,6 +56,47 @@ struct SettingsToggle: View { } } // MARK: - +struct SettingsFont: View { + var name: String + @Binding var value: Int + var action: (_ value: Int) -> Void = {value in } + + func fontName(_ value: Int) -> (String, String, String) { + return (value == 0) ? ("textformat", String(localized:"System Font"), String(localized: "Standard iOS Font")) + : (value == 1) ? ("textformat.alt", String(localized:"Taler Font"), String(localized: "Atkinson-Hyperlegible")) + : ("placeholdertext.fill", String(localized:"New Font"), String(localized:"New Font")) // Neumorphism + } + var body: some View { + VStack { + let fontName = fontName(value) + HStack { + Text(name) + .font(.talerTitle2) + Text(" ") + .font(.talerLargeTitle) + Spacer() + Image(systemName: fontName.0) + .font(.talerLargeTitle) + .accessibilityLabel(fontName.1) + .onTapGesture { + if value > 0 { + value = 0 // TODO: -1 for Neumorphism + } else { + value = value + 1 + } + } + } +// .onChange(of: value) { value in +// action(value) +// } + + Text(fontName.2) + .frame(maxWidth: .infinity, alignment: .leading) + .font(.talerCaption) + }.padding([.bottom], 4) + } +} +// MARK: - struct SettingsSpeaker: View { var name: String @Binding var value: Int diff --git a/TalerWallet1/Views/Settings/SettingsView.swift b/TalerWallet1/Views/Settings/SettingsView.swift @@ -27,6 +27,7 @@ struct SettingsView: View { @AppStorage("developerMode") var developerMode: Bool = false #endif @AppStorage("playSounds") var playSounds: Int = 0 + @AppStorage("talerFonts") var talerFonts: Int = 0 @AppStorage("developDelay") var developDelay: Bool = false @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic @@ -73,6 +74,7 @@ struct SettingsView: View { let walletCore = WalletCore.shared Group { List { + SettingsFont(name: String(localized: "Font to use"), value: $talerFonts) SettingsSpeaker(name: String(localized: "Play Payment Sounds"), value: $playSounds, description: String(localized: "After a transaction finished")) HStack {