From 686d93f49ed8201a782de4468cbf247385fff8f2 Mon Sep 17 00:00:00 2001 From: Stuart Breckenridge Date: Tue, 20 Dec 2022 17:20:45 +0800 Subject: [PATCH] Switched to Pickers instead of Sliders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …because tick marks on SwiftUI pickers are painful --- NetNewsWire.xcodeproj/project.pbxproj | 6 +- Shared/Extensions/IconImage.swift | 13 +++- .../Buttons.strings | 0 .../Errors.strings | 0 .../LocalizedNetNewsWireError.swift | 0 .../Appearance/TimelineCustomizerView.swift | 67 ++++++++++--------- 6 files changed, 51 insertions(+), 35 deletions(-) rename Shared/{Translations => Localizations}/Buttons.strings (100%) rename Shared/{Translations => Localizations}/Errors.strings (100%) rename Shared/{Translations => Localizations}/LocalizedNetNewsWireError.swift (100%) diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 508e6a3d3..17fdf5687 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -2644,7 +2644,7 @@ 511D43CE231FA51100FB1562 /* Resources */, 176813A22564B9D100D98635 /* Widget */, 173A64162547BE0900267F6E /* AccountType+Helpers.swift */, - DFB34985294B3B0800BC81AD /* Translations */, + DFB34985294B3B0800BC81AD /* Localizations */, ); path = Shared; sourceTree = ""; @@ -2983,14 +2983,14 @@ path = Views; sourceTree = ""; }; - DFB34985294B3B0800BC81AD /* Translations */ = { + DFB34985294B3B0800BC81AD /* Localizations */ = { isa = PBXGroup; children = ( DFB34983294B3AFF00BC81AD /* Buttons.strings */, DFB34998294C4F1D00BC81AD /* Errors.strings */, DFB34995294C4DCB00BC81AD /* LocalizedNetNewsWireError.swift */, ); - path = Translations; + path = Localizations; sourceTree = ""; }; DFB34986294B446300BC81AD /* SwiftUI Extensions */ = { diff --git a/Shared/Extensions/IconImage.swift b/Shared/Extensions/IconImage.swift index e460e4b6b..341a4de7a 100644 --- a/Shared/Extensions/IconImage.swift +++ b/Shared/Extensions/IconImage.swift @@ -162,7 +162,7 @@ extension CGImage { } -enum IconSize: Int, CaseIterable { +enum IconSize: Int, CaseIterable, CustomStringConvertible { case small = 1 case medium = 2 case large = 3 @@ -181,5 +181,16 @@ enum IconSize: Int, CaseIterable { return CGSize(width: IconSize.largeDimension, height: IconSize.largeDimension) } } + + var description: String { + switch self { + case .small: + return "Small" + case .medium: + return "Medium" + case .large: + return "Large" + } + } } diff --git a/Shared/Translations/Buttons.strings b/Shared/Localizations/Buttons.strings similarity index 100% rename from Shared/Translations/Buttons.strings rename to Shared/Localizations/Buttons.strings diff --git a/Shared/Translations/Errors.strings b/Shared/Localizations/Errors.strings similarity index 100% rename from Shared/Translations/Errors.strings rename to Shared/Localizations/Errors.strings diff --git a/Shared/Translations/LocalizedNetNewsWireError.swift b/Shared/Localizations/LocalizedNetNewsWireError.swift similarity index 100% rename from Shared/Translations/LocalizedNetNewsWireError.swift rename to Shared/Localizations/LocalizedNetNewsWireError.swift diff --git a/iOS/Settings/Views/Appearance/TimelineCustomizerView.swift b/iOS/Settings/Views/Appearance/TimelineCustomizerView.swift index 912d1bc88..69ea90b3f 100644 --- a/iOS/Settings/Views/Appearance/TimelineCustomizerView.swift +++ b/iOS/Settings/Views/Appearance/TimelineCustomizerView.swift @@ -15,43 +15,44 @@ struct TimelineCustomizerView: View { var body: some View { List { - Section(header: Text("ICON_SIZE", tableName: "Settings")) { - Slider(value: Binding(get: { Float(appDefaults.timelineIconSize.rawValue) }, - set: { appDefaults.timelineIconSize = IconSize(rawValue: Int($0))! }), - in: Float(IconSize.small.rawValue)...Float(IconSize.large.rawValue), - step: 1, - label: { Text("ICON_SIZE", tableName: "Settings") }, - onEditingChanged: { _ in - }) - .tint(Color(uiColor: AppAssets.primaryAccentColor)) + Section { + ZStack { + Picker(selection: $appDefaults.timelineIconSize) { + ForEach(IconSize.allCases, id: \.self) { size in + Text(size.description) + } + } label: { + Text("ICON_SIZE", tableName: "Settings") + } + } .padding(.horizontal, 16) - .padding(.vertical, 8) + .padding(.vertical, 4) .listRowInsets(EdgeInsets(top: 0, leading: 15, bottom: 0, trailing: 15)) .background( RoundedRectangle(cornerRadius: 8) - .foregroundColor(Color(uiColor: UIColor.systemBackground)) + .foregroundColor(Color(uiColor: UIColor.secondarySystemGroupedBackground)) ) - } .listRowInsets(EdgeInsets(top: 0, leading: 30, bottom: 0, trailing: 30)) .listRowBackground(Color.clear) .listRowSeparator(.hidden) - Section(header: Text("NUMBER_OF_LINES", tableName: "Settings")) { - Slider(value: Binding(get: { Float(appDefaults.timelineNumberOfLines) }, - set: { appDefaults.timelineNumberOfLines = Int($0) }), - in: 1...5, - step: 1, - label: { Text("NUMBER_OF_LINES", tableName: "Settings") }, - onEditingChanged: { _ in - }) - .tint(Color(uiColor: AppAssets.primaryAccentColor)) + Section { + ZStack { + Picker(selection: $appDefaults.timelineNumberOfLines) { + ForEach(1...5, id: \.self) { size in + Text("\(size)") + } + } label: { + Text("NUMBER_OF_LINES", tableName: "Settings") + } + } .padding(.horizontal, 16) - .padding(.vertical, 8) + .padding(.vertical, 4) .listRowInsets(EdgeInsets(top: 0, leading: 15, bottom: 0, trailing: 15)) .background( RoundedRectangle(cornerRadius: 8) - .foregroundColor(Color(uiColor: UIColor.systemBackground)) + .foregroundColor(Color(uiColor: UIColor.secondarySystemGroupedBackground)) ) } .listRowInsets(EdgeInsets(top: 0, leading: 30, bottom: 0, trailing: 30)) @@ -59,16 +60,22 @@ struct TimelineCustomizerView: View { .listRowSeparator(.hidden) Section { - timeLinePreviewRow - .listRowInsets(EdgeInsets(top: 4, leading: 4, bottom: 4, trailing: 28)) + withAnimation { + timeLinePreviewRow + .listRowInsets(EdgeInsets(top: 8, leading: 4, bottom: 4, trailing: 24)) + } + } } .listStyle(.grouped) .navigationTitle(Text("TIMELINE_LAYOUT", tableName: "Settings")) + .onAppear { + + } } var timeLinePreviewRow: some View { - HStack(spacing: 6) { + HStack(alignment: .top, spacing: 6) { VStack { Circle() .foregroundColor(Color(uiColor: AppAssets.primaryAccentColor)) @@ -76,13 +83,14 @@ struct TimelineCustomizerView: View { Spacer() }.frame(width: 12) VStack { - Image(systemName: "globe.europe.africa.fill") + Image("faviconTemplateImage") + .renderingMode(.template) .resizable() .frame(width: appDefaults.timelineIconSize.size.width, height: appDefaults.timelineIconSize.size.height) .foregroundColor(Color(uiColor: AppAssets.primaryAccentColor)) Spacer() }.frame(width: appDefaults.timelineIconSize.size.width) - VStack(spacing: 4) { + VStack(alignment: .leading, spacing: 4) { Text("Enim ut tellus elementum sagittis vitae et. Nibh praesent tristique magna sit amet purus gravida quis blandit. Neque volutpat ac tincidunt vitae semper quis lectus nulla. Massa id neque aliquam vestibulum morbi blandit. Ultrices vitae auctor eu augue. Enim eu turpis egestas pretium aenean pharetra magna. Eget gravida cum sociis natoque. Sit amet consectetur adipiscing elit. Auctor eu augue ut lectus arcu bibendum. Maecenas volutpat blandit aliquam etiam erat velit. Ut pharetra sit amet aliquam id diam maecenas ultricies. In hac habitasse platea dictumst quisque sagittis purus sit amet.") .bold() .lineLimit(appDefaults.timelineNumberOfLines) @@ -100,10 +108,7 @@ struct TimelineCustomizerView: View { .edgesIgnoringSafeArea(.all) .padding(.vertical, 4) .padding(.leading, 4) - } - - } struct TimelineCustomizerView_Previews: PreviewProvider {