Added a font scale slider on macOS

This commit is contained in:
Thomas Ricouard 2023-01-17 21:08:05 +01:00
parent 504f93fab0
commit c7a832e110
6 changed files with 44 additions and 25 deletions

View file

@ -49,7 +49,7 @@ struct SideBarView<Content: View>: View {
.fill(.red) .fill(.red)
Text(String(badge)) Text(String(badge))
.foregroundColor(.white) .foregroundColor(.white)
.font(.caption) .font(.caption2)
} }
.frame(width: 20, height: 20) .frame(width: 20, height: 20)
.offset(x: 10, y: -10) .offset(x: 10, y: -10)

View file

@ -2,9 +2,11 @@ import DesignSystem
import Models import Models
import Status import Status
import SwiftUI import SwiftUI
import Env
struct DisplaySettingsView: View { struct DisplaySettingsView: View {
@EnvironmentObject private var theme: Theme @EnvironmentObject private var theme: Theme
@EnvironmentObject private var userPreferences: UserPreferences
@State private var isThemeSelectorPresented = false @State private var isThemeSelectorPresented = false
@ -40,6 +42,13 @@ struct DisplaySettingsView: View {
Text(buttonStyle.description).tag(buttonStyle) Text(buttonStyle.description).tag(buttonStyle)
} }
} }
if ProcessInfo.processInfo.isiOSAppOnMac {
VStack {
Slider(value: $userPreferences.fontSizeScale, in: 0.5...1.5, step: 0.1)
Text("Font scaling: \(String(format: "%.1f", userPreferences.fontSizeScale))")
.font(.scaledBody)
}
}
} }
.listRowBackground(theme.primaryBackgroundColor) .listRowBackground(theme.primaryBackgroundColor)

View file

@ -109,15 +109,17 @@ struct SettingsTabs: View {
private var appSection: some View { private var appSection: some View {
Section("App") { Section("App") {
NavigationLink(destination: IconSelectorView()) { if !ProcessInfo.processInfo.isiOSAppOnMac {
Label { NavigationLink(destination: IconSelectorView()) {
Text("App Icon") Label {
} icon: { Text("App Icon")
if let icon = IconSelectorView.Icon(string: UIApplication.shared.alternateIconName ?? "AppIcon") { } icon: {
Image(uiImage: .init(named: icon.iconName)!) if let icon = IconSelectorView.Icon(string: UIApplication.shared.alternateIconName ?? "AppIcon") {
.resizable() Image(uiImage: .init(named: icon.iconName)!)
.frame(width: 25, height: 25) .resizable()
.cornerRadius(4) .frame(width: 25, height: 25)
.cornerRadius(4)
}
} }
} }
} }

View file

@ -82,16 +82,16 @@ public struct AccountDetailView: View {
viewModel.isCurrentUser = isCurrentUser viewModel.isCurrentUser = isCurrentUser
viewModel.client = client viewModel.client = client
Task { Task {
await viewModel.fetchAccount() await withTaskGroup(of: Void.self) { group in
} group.addTask { await viewModel.fetchAccount() }
Task { group.addTask {
if viewModel.statuses.isEmpty { if await viewModel.statuses.isEmpty {
await viewModel.fetchStatuses() await viewModel.fetchStatuses()
}
}
group.addTask { await viewModel.fetchFamilliarFollowers() }
} }
} }
Task {
await viewModel.fetchFamilliarFollowers()
}
} }
.refreshable { .refreshable {
Task { Task {

View file

@ -1,9 +1,16 @@
import SwiftUI import SwiftUI
import Env
@MainActor
extension Font { extension Font {
public static func userScaledFontSize(baseSize: CGFloat) -> CGFloat {
UIFontMetrics.default.scaledValue(for: baseSize * UserPreferences.shared.fontSizeScale)
}
public static var scaledTitle: Font { public static var scaledTitle: Font {
if ProcessInfo.processInfo.isiOSAppOnMac { if ProcessInfo.processInfo.isiOSAppOnMac {
return .system(size: UIFontMetrics.default.scaledValue(for: 28)) return .system(size: userScaledFontSize(baseSize: 28))
} else { } else {
return .title return .title
} }
@ -11,7 +18,7 @@ extension Font {
public static var scaledHeadline: Font { public static var scaledHeadline: Font {
if ProcessInfo.processInfo.isiOSAppOnMac { if ProcessInfo.processInfo.isiOSAppOnMac {
return .system(size: UIFontMetrics.default.scaledValue(for: 19), weight: .semibold) return .system(size: userScaledFontSize(baseSize: 20), weight: .semibold)
} else { } else {
return .headline return .headline
} }
@ -19,7 +26,7 @@ extension Font {
public static var scaledBody: Font { public static var scaledBody: Font {
if ProcessInfo.processInfo.isiOSAppOnMac { if ProcessInfo.processInfo.isiOSAppOnMac {
return .system(size: UIFontMetrics.default.scaledValue(for: 19)) return .system(size: userScaledFontSize(baseSize: 19))
} else { } else {
return .body return .body
} }
@ -27,7 +34,7 @@ extension Font {
public static var scaledCallout: Font { public static var scaledCallout: Font {
if ProcessInfo.processInfo.isiOSAppOnMac { if ProcessInfo.processInfo.isiOSAppOnMac {
return .system(size: UIFontMetrics.default.scaledValue(for: 17)) return .system(size: userScaledFontSize(baseSize: 17))
} else { } else {
return .callout return .callout
} }
@ -35,7 +42,7 @@ extension Font {
public static var scaledSubheadline: Font { public static var scaledSubheadline: Font {
if ProcessInfo.processInfo.isiOSAppOnMac { if ProcessInfo.processInfo.isiOSAppOnMac {
return .system(size: UIFontMetrics.default.scaledValue(for: 16)) return .system(size: userScaledFontSize(baseSize: 16))
} else { } else {
return .subheadline return .subheadline
} }
@ -44,7 +51,7 @@ extension Font {
public static var scaledFootnote: Font { public static var scaledFootnote: Font {
if ProcessInfo.processInfo.isiOSAppOnMac { if ProcessInfo.processInfo.isiOSAppOnMac {
return .system(size: UIFontMetrics.default.scaledValue(for: 15)) return .system(size: userScaledFontSize(baseSize: 15))
} else { } else {
return .footnote return .footnote
} }
@ -52,7 +59,7 @@ extension Font {
public static var scaledCaption: Font { public static var scaledCaption: Font {
if ProcessInfo.processInfo.isiOSAppOnMac { if ProcessInfo.processInfo.isiOSAppOnMac {
return .system(size: UIFontMetrics.default.scaledValue(for: 14)) return .system(size: userScaledFontSize(baseSize: 14))
} else { } else {
return .caption return .caption
} }

View file

@ -13,6 +13,7 @@ public class UserPreferences: ObservableObject {
@AppStorage("remote_local_timeline") public var remoteLocalTimelines: [String] = [] @AppStorage("remote_local_timeline") public var remoteLocalTimelines: [String] = []
@AppStorage("preferred_browser") public var preferredBrowser: PreferredBrowser = .inAppSafari @AppStorage("preferred_browser") public var preferredBrowser: PreferredBrowser = .inAppSafari
@AppStorage("draft_posts") public var draftsPosts: [String] = [] @AppStorage("draft_posts") public var draftsPosts: [String] = []
@AppStorage("font_size_scale") public var fontSizeScale: Double = 1
public var pushNotificationsCount: Int { public var pushNotificationsCount: Int {
get { get {