[Previews] Adds example “Custom Tint Color” feature to preview ExperimentalFeaturesView
This commit is contained in:
parent
bd0c72e847
commit
8efefd19a0
@ -168,6 +168,8 @@
|
||||
BFFDF04623E3D3A600931B96 /* libMupen64Plus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFFDF04523E3D3A600931B96 /* libMupen64Plus.a */; };
|
||||
D517F6BA29E730DA000D14D0 /* SettingsName.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A9C01929DDFBDD00A8D610 /* SettingsName.swift */; };
|
||||
D517F6BE29E7535F000D14D0 /* Collection+Optionals.swift in Sources */ = {isa = PBXBuildFile; fileRef = D517F6BD29E7535F000D14D0 /* Collection+Optionals.swift */; };
|
||||
D51CB7A129EDC01400B59678 /* libDeltaFeatures.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D5D7C1F129E60DFF00663793 /* libDeltaFeatures.a */; };
|
||||
D51CB7A629EDC15900B59678 /* ExperimentalFeatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51CB7A529EDC15900B59678 /* ExperimentalFeatures.swift */; };
|
||||
D524F4A1273DE9A100D500B2 /* AltKit in Frameworks */ = {isa = PBXBuildFile; productRef = D524F4A0273DE9A100D500B2 /* AltKit */; };
|
||||
D524F4A3273DE9C000D500B2 /* ProcessInfo+JIT.swift in Sources */ = {isa = PBXBuildFile; fileRef = D524F4A2273DE9C000D500B2 /* ProcessInfo+JIT.swift */; };
|
||||
D524F4A5273DEBB400D500B2 /* ServerManager+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = D524F4A4273DEBB400D500B2 /* ServerManager+Delta.swift */; };
|
||||
@ -181,6 +183,9 @@
|
||||
D54F710429E89DFC009C069A /* NotificationName+Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54F710329E89DFC009C069A /* NotificationName+Settings.swift */; };
|
||||
D55C468F29E761C000EA6DE9 /* AnyFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55C468E29E761C000EA6DE9 /* AnyFeature.swift */; };
|
||||
D55C469129E7631000EA6DE9 /* AnyOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55C469029E7631000EA6DE9 /* AnyOption.swift */; };
|
||||
D57D795629F300E100BB2CF8 /* CustomTintColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A817AF29DF4E6E00904AFE /* CustomTintColor.swift */; };
|
||||
D57D795F29F315F700BB2CF8 /* FeatureDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54A4BB229E4D27E004C7D57 /* FeatureDetailView.swift */; };
|
||||
D57D796029F315F700BB2CF8 /* ExperimentalFeaturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A9C00229DDED6D00A8D610 /* ExperimentalFeaturesView.swift */; };
|
||||
D5864970297734280081477E /* CheatMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = D586496F297734280081477E /* CheatMetadata.swift */; };
|
||||
D586497229774ABD0081477E /* CheatBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D586497129774ABD0081477E /* CheatBase.swift */; };
|
||||
D5864978297756CE0081477E /* CheatBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5864977297756CE0081477E /* CheatBaseView.swift */; };
|
||||
@ -415,6 +420,7 @@
|
||||
BFFDF04523E3D3A600931B96 /* libMupen64Plus.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libMupen64Plus.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
C786AF1D2DDB6223BE2063CC /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Delta.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
D517F6BD29E7535F000D14D0 /* Collection+Optionals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Optionals.swift"; sourceTree = "<group>"; };
|
||||
D51CB7A529EDC15900B59678 /* ExperimentalFeatures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExperimentalFeatures.swift; sourceTree = "<group>"; };
|
||||
D524F4A2273DE9C000D500B2 /* ProcessInfo+JIT.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProcessInfo+JIT.swift"; sourceTree = "<group>"; };
|
||||
D524F4A4273DEBB400D500B2 /* ServerManager+Delta.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ServerManager+Delta.swift"; sourceTree = "<group>"; };
|
||||
D5011C47281B6E8B00A0760B /* CharacterSet+Filename.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CharacterSet+Filename.swift"; sourceTree = "<group>"; };
|
||||
@ -435,6 +441,7 @@
|
||||
D58F39C529E0A473008B4100 /* Option.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Option.swift; sourceTree = "<group>"; };
|
||||
D58F39C829E0A702008B4100 /* UserDefaults+OptionValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+OptionValues.swift"; sourceTree = "<group>"; };
|
||||
D592D6FE29E48FFB008D218A /* OptionPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptionPickerView.swift; sourceTree = "<group>"; };
|
||||
D5A817AF29DF4E6E00904AFE /* CustomTintColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTintColor.swift; sourceTree = "<group>"; };
|
||||
D5A817B229DF6C6C00904AFE /* ExperimentalFeatures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExperimentalFeatures.swift; sourceTree = "<group>"; };
|
||||
D5A98CE1284EF14B00E023E5 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
|
||||
D5A9BFFD29DDECF100A8D610 /* Feature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Feature.swift; sourceTree = "<group>"; };
|
||||
@ -477,6 +484,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D51CB7A129EDC01400B59678 /* libDeltaFeatures.a in Frameworks */,
|
||||
87343D7B985519A5890A61C6 /* libPods-DeltaPreviews.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -1018,10 +1026,20 @@
|
||||
children = (
|
||||
D539103129E88B6C0006B350 /* DeltaPreviews.h */,
|
||||
D539103F29E88BC40006B350 /* ContentView.swift */,
|
||||
D57D795829F3054800BB2CF8 /* Experimental Features */,
|
||||
);
|
||||
path = DeltaPreviews;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D57D795829F3054800BB2CF8 /* Experimental Features */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D51CB7A529EDC15900B59678 /* ExperimentalFeatures.swift */,
|
||||
D5A817AF29DF4E6E00904AFE /* CustomTintColor.swift */,
|
||||
);
|
||||
path = "Experimental Features";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D57D795C29F30B1400BB2CF8 /* Experimental Features */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -1577,6 +1595,10 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D539104029E88BC40006B350 /* ContentView.swift in Sources */,
|
||||
D57D795629F300E100BB2CF8 /* CustomTintColor.swift in Sources */,
|
||||
D57D795F29F315F700BB2CF8 /* FeatureDetailView.swift in Sources */,
|
||||
D51CB7A629EDC15900B59678 /* ExperimentalFeatures.swift in Sources */,
|
||||
D57D796029F315F700BB2CF8 /* ExperimentalFeaturesView.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
79
DeltaPreviews/Experimental Features/CustomTintColor.swift
Normal file
79
DeltaPreviews/Experimental Features/CustomTintColor.swift
Normal file
@ -0,0 +1,79 @@
|
||||
//
|
||||
// CustomTintColor.swift
|
||||
// Delta
|
||||
//
|
||||
// Created by Riley Testut on 4/6/23.
|
||||
// Copyright © 2023 Riley Testut. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import DeltaFeatures
|
||||
|
||||
enum TintColor: String, CaseIterable, Identifiable
|
||||
{
|
||||
case red
|
||||
case orange
|
||||
case yellow
|
||||
case green
|
||||
case blue
|
||||
case purple
|
||||
|
||||
var id: Self { self }
|
||||
|
||||
var color: Color {
|
||||
switch self
|
||||
{
|
||||
case .red: return .red
|
||||
case .orange: return .orange
|
||||
case .yellow: return .yellow
|
||||
case .green: return .green
|
||||
case .blue: return .blue
|
||||
case .purple: return .purple
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension TintColor: LocalizedOptionValue
|
||||
{
|
||||
var localizedDescription: Text {
|
||||
switch self
|
||||
{
|
||||
case .red: return Text("Red")
|
||||
case .orange: return Text("Orange")
|
||||
case .yellow: return Text("Yellow")
|
||||
case .green: return Text("Green")
|
||||
case .blue: return Text("Blue")
|
||||
case .purple: return Text("Purple")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct CustomTintColorOptions
|
||||
{
|
||||
@Option(name: "Tint Color", detailView: { CustomTintColorView(tintColor: $0) })
|
||||
var value: TintColor = .purple
|
||||
|
||||
@Option(name: "Respect Dark Mode")
|
||||
var respectDarkMode: Bool = true
|
||||
}
|
||||
|
||||
private struct CustomTintColorView: View
|
||||
{
|
||||
@Binding
|
||||
var tintColor: TintColor
|
||||
|
||||
var body: some View {
|
||||
Picker("Tint Color", selection: $tintColor.animation()) {
|
||||
ForEach(TintColor.allCases) { tintColor in
|
||||
HStack(spacing: 8) {
|
||||
Circle()
|
||||
.fill(tintColor.color)
|
||||
.frame(width: 44, height: 44)
|
||||
|
||||
tintColor.localizedDescription
|
||||
}
|
||||
}
|
||||
}
|
||||
.pickerStyle(.inline)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
//
|
||||
// ExperimentalFeatures.swift
|
||||
// DeltaPreviews
|
||||
//
|
||||
// Created by Riley Testut on 4/17/23.
|
||||
// Copyright © 2023 Riley Testut. All rights reserved.
|
||||
//
|
||||
|
||||
import DeltaFeatures
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct ExperimentalFeatures: FeatureContainer
|
||||
{
|
||||
static let shared = ExperimentalFeatures()
|
||||
|
||||
@Feature(name: "Custom Tint Color",
|
||||
description: "Change the accent color used throughout the app.",
|
||||
options: CustomTintColorOptions())
|
||||
var customTintColor
|
||||
|
||||
private init()
|
||||
{
|
||||
self.prepareFeatures()
|
||||
}
|
||||
}
|
||||
|
||||
struct ExperimentalFeatures_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
NavigationView {
|
||||
ExperimentalFeaturesView()
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user