From 868b747291e52e4c22c175a8a7625df5b264e73d Mon Sep 17 00:00:00 2001 From: Trey t Date: Sun, 13 Feb 2022 17:16:13 -0600 Subject: [PATCH] WIP - icon generator --- Feels.xcodeproj/project.pbxproj | 10 +- .../Assets.xcassets/custom_icon/Contents.json | 6 + .../custom_icon/bell.imageset/Contents.json | 21 +++ .../custom_icon/bell.imageset/bell-solid.svg | 1 + .../bolt2.imageset/Contents.json | 0 .../bolt2.imageset/bolt-solid.svg | 0 .../custom_icon/bomb.imageset/Contents.json | 21 +++ .../custom_icon/bomb.imageset/bomb-solid.svg | 1 + .../custom_icon/btc.imageset/Contents.json | 21 +++ .../custom_icon/btc.imageset/btc-brands.svg | 1 + .../custom_icon/code.imageset/Contents.json | 21 +++ .../custom_icon/code.imageset/code-solid.svg | 1 + .../custom_icon/covid.imageset/Contents.json | 21 +++ .../covid.imageset/virus-covid-solid.svg | 1 + .../custom_icon/crown.imageset/Contents.json | 21 +++ .../crown.imageset/crown-solid.svg | 1 + .../custom_icon/divide.imageset/Contents.json | 21 +++ .../divide.imageset/divide-solid.svg | 1 + .../dollar.imageset/Contents.json | 0 .../dollar.imageset/dollar-sign-solid.svg | 0 .../exclamation.imageset/Contents.json | 21 +++ .../exclamation-solid.svg | 1 + .../custom_icon/fan.imageset/Contents.json | 21 +++ .../custom_icon/fan.imageset/fan-solid.svg | 1 + .../fire.imageset/Contents.json | 0 .../fire.imageset/fire-solid.svg | 0 .../custom_icon/floppy.imageset/Contents.json | 21 +++ .../floppy.imageset/floppy-disk-solid.svg | 1 + .../missing.imageset/Contents.json | 0 .../missing.imageset/times-solid.svg | 0 .../custom_icon/poo.imageset/Contents.json | 21 +++ .../custom_icon/poo.imageset/poo-solid.svg | 1 + .../custom_icon/skull.imageset/Contents.json | 21 +++ .../skull.imageset/skull-solid.svg | 1 + .../custom_icon/skull2.imageset/Contents.json | 21 +++ .../skull-crossbones-solid.svg | 1 + .../custom_icon/x.imageset/Contents.json | 21 +++ .../custom_icon/x.imageset/x-solid.svg | 1 + Shared/Models/CustomIcon.swift | 32 ++++ Shared/views/CreateIconView.swift | 156 +++++++----------- Shared/views/IconView.swift | 79 +++++++++ 41 files changed, 494 insertions(+), 97 deletions(-) create mode 100644 Shared/Assets.xcassets/custom_icon/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/bell.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/bell.imageset/bell-solid.svg rename Shared/Assets.xcassets/{ => custom_icon}/bolt2.imageset/Contents.json (100%) rename Shared/Assets.xcassets/{ => custom_icon}/bolt2.imageset/bolt-solid.svg (100%) create mode 100644 Shared/Assets.xcassets/custom_icon/bomb.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/bomb.imageset/bomb-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/btc.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/btc.imageset/btc-brands.svg create mode 100644 Shared/Assets.xcassets/custom_icon/code.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/code.imageset/code-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/covid.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/covid.imageset/virus-covid-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/crown.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/crown.imageset/crown-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/divide.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/divide.imageset/divide-solid.svg rename Shared/Assets.xcassets/{ => custom_icon}/dollar.imageset/Contents.json (100%) rename Shared/Assets.xcassets/{ => custom_icon}/dollar.imageset/dollar-sign-solid.svg (100%) create mode 100644 Shared/Assets.xcassets/custom_icon/exclamation.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/exclamation.imageset/exclamation-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/fan.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/fan.imageset/fan-solid.svg rename Shared/Assets.xcassets/{ => custom_icon}/fire.imageset/Contents.json (100%) rename Shared/Assets.xcassets/{ => custom_icon}/fire.imageset/fire-solid.svg (100%) create mode 100644 Shared/Assets.xcassets/custom_icon/floppy.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/floppy.imageset/floppy-disk-solid.svg rename Shared/Assets.xcassets/{ => custom_icon}/missing.imageset/Contents.json (100%) rename Shared/Assets.xcassets/{ => custom_icon}/missing.imageset/times-solid.svg (100%) create mode 100644 Shared/Assets.xcassets/custom_icon/poo.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/poo.imageset/poo-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/skull.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/skull.imageset/skull-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/skull2.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/skull2.imageset/skull-crossbones-solid.svg create mode 100644 Shared/Assets.xcassets/custom_icon/x.imageset/Contents.json create mode 100644 Shared/Assets.xcassets/custom_icon/x.imageset/x-solid.svg create mode 100644 Shared/Models/CustomIcon.swift create mode 100644 Shared/views/IconView.swift diff --git a/Feels.xcodeproj/project.pbxproj b/Feels.xcodeproj/project.pbxproj index 0a913f1..a161a3a 100644 --- a/Feels.xcodeproj/project.pbxproj +++ b/Feels.xcodeproj/project.pbxproj @@ -78,6 +78,8 @@ 1CD90B71278C80CA001C4FEA /* Feels.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90AEB278C7DDF001C4FEA /* Feels.xcdatamodeld */; }; 1CD90B76278C8119001C4FEA /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B75278C8119001C4FEA /* LocalNotification.swift */; }; 1CD90B77278C8119001C4FEA /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90B75278C8119001C4FEA /* LocalNotification.swift */; }; + 1CEC966F27B9C29300CC8688 /* IconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CEC966E27B9C29300CC8688 /* IconView.swift */; }; + 1CEC967127B9C2BB00CC8688 /* CustomIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CEC967027B9C2BB00CC8688 /* CustomIcon.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -181,6 +183,8 @@ 1CD90B6F278C8000001C4FEA /* FeelsWidgetExtensionDev.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = FeelsWidgetExtensionDev.entitlements; sourceTree = ""; }; 1CD90B70278C8000001C4FEA /* Feels (iOS)Dev.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = "Feels (iOS)Dev.entitlements"; sourceTree = ""; }; 1CD90B75278C8119001C4FEA /* LocalNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalNotification.swift; sourceTree = ""; }; + 1CEC966E27B9C29300CC8688 /* IconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconView.swift; sourceTree = ""; }; + 1CEC967027B9C2BB00CC8688 /* CustomIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomIcon.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -264,15 +268,16 @@ 1CAD602F27A5C1C800C520BD /* AddMoodHeaderView.swift */, 1CAD603127A5C1C800C520BD /* BGView.swift */, 1CAD603227A5C1C800C520BD /* ContentView.swift */, + 1C02589B27B9677A00EB91AC /* CreateIconView.swift */, 1CB101C427B62A2D00D1C033 /* EmptyView.swift */, 1CAD602E27A5C1C800C520BD /* FilterView.swift */, 1CAD602D27A5C1C800C520BD /* GraphView.swift */, 1CAD603027A5C1C800C520BD /* HeaderPercView.swift */, 1CAD603327A5C1C800C520BD /* HeaderStatsView.swift */, + 1CEC966E27B9C29300CC8688 /* IconView.swift */, 1CAD602C27A5C1C800C520BD /* SettingsView.swift */, 1CAD602B27A5C1C800C520BD /* SmallRollUpHeaderView.swift */, 1CAD603D27A6ECCD00C520BD /* SwitchableView.swift */, - 1C02589B27B9677A00EB91AC /* CreateIconView.swift */, ); path = Views; sourceTree = ""; @@ -386,6 +391,7 @@ 1C358FAC27ADD0C3002C83A6 /* Theme.swift */, 1C5F4977279C945E0092F1B4 /* UserDefaultsStore.swift */, 1C02589D27B9821700EB91AC /* CenterTiledImage.swift */, + 1CEC967027B9C2BB00CC8688 /* CustomIcon.swift */, ); path = Models; sourceTree = ""; @@ -620,10 +626,12 @@ 1CAD603627A5C1C800C520BD /* GraphView.swift in Sources */, 1CD90B66278C7EBA001C4FEA /* MoodEntryExtension.swift in Sources */, 1CD90B1C278C7DE0001C4FEA /* Persistence.swift in Sources */, + 1CEC966F27B9C29300CC8688 /* IconView.swift in Sources */, 1CA0377A279A296E00D26164 /* OnboardingMain.swift in Sources */, 1C5F4978279C945E0092F1B4 /* UserDefaultsStore.swift in Sources */, 1CD90B18278C7DE0001C4FEA /* FeelsApp.swift in Sources */, 1CA03777279A295600D26164 /* OnboardingTitle.swift in Sources */, + 1CEC967127B9C2BB00CC8688 /* CustomIcon.swift in Sources */, 1C358FAD27ADD0C3002C83A6 /* Theme.swift in Sources */, 1C02589C27B9677A00EB91AC /* CreateIconView.swift in Sources */, ); diff --git a/Shared/Assets.xcassets/custom_icon/Contents.json b/Shared/Assets.xcassets/custom_icon/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/bell.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/bell.imageset/Contents.json new file mode 100644 index 0000000..7f9b6f4 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/bell.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "bell-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/bell.imageset/bell-solid.svg b/Shared/Assets.xcassets/custom_icon/bell.imageset/bell-solid.svg new file mode 100644 index 0000000..f21cc7d --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/bell.imageset/bell-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/bolt2.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/bolt2.imageset/Contents.json similarity index 100% rename from Shared/Assets.xcassets/bolt2.imageset/Contents.json rename to Shared/Assets.xcassets/custom_icon/bolt2.imageset/Contents.json diff --git a/Shared/Assets.xcassets/bolt2.imageset/bolt-solid.svg b/Shared/Assets.xcassets/custom_icon/bolt2.imageset/bolt-solid.svg similarity index 100% rename from Shared/Assets.xcassets/bolt2.imageset/bolt-solid.svg rename to Shared/Assets.xcassets/custom_icon/bolt2.imageset/bolt-solid.svg diff --git a/Shared/Assets.xcassets/custom_icon/bomb.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/bomb.imageset/Contents.json new file mode 100644 index 0000000..086dd5a --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/bomb.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "bomb-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/bomb.imageset/bomb-solid.svg b/Shared/Assets.xcassets/custom_icon/bomb.imageset/bomb-solid.svg new file mode 100644 index 0000000..0427c34 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/bomb.imageset/bomb-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/btc.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/btc.imageset/Contents.json new file mode 100644 index 0000000..8b900ab --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/btc.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "btc-brands.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/btc.imageset/btc-brands.svg b/Shared/Assets.xcassets/custom_icon/btc.imageset/btc-brands.svg new file mode 100644 index 0000000..e6eee0f --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/btc.imageset/btc-brands.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/code.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/code.imageset/Contents.json new file mode 100644 index 0000000..ed03090 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/code.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "code-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/code.imageset/code-solid.svg b/Shared/Assets.xcassets/custom_icon/code.imageset/code-solid.svg new file mode 100644 index 0000000..725f767 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/code.imageset/code-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/covid.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/covid.imageset/Contents.json new file mode 100644 index 0000000..10a6c82 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/covid.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "virus-covid-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/covid.imageset/virus-covid-solid.svg b/Shared/Assets.xcassets/custom_icon/covid.imageset/virus-covid-solid.svg new file mode 100644 index 0000000..02be96a --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/covid.imageset/virus-covid-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/crown.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/crown.imageset/Contents.json new file mode 100644 index 0000000..287993c --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/crown.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "crown-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/crown.imageset/crown-solid.svg b/Shared/Assets.xcassets/custom_icon/crown.imageset/crown-solid.svg new file mode 100644 index 0000000..d8bce79 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/crown.imageset/crown-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/divide.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/divide.imageset/Contents.json new file mode 100644 index 0000000..069d4d2 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/divide.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "divide-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/divide.imageset/divide-solid.svg b/Shared/Assets.xcassets/custom_icon/divide.imageset/divide-solid.svg new file mode 100644 index 0000000..78cc82f --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/divide.imageset/divide-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/dollar.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/dollar.imageset/Contents.json similarity index 100% rename from Shared/Assets.xcassets/dollar.imageset/Contents.json rename to Shared/Assets.xcassets/custom_icon/dollar.imageset/Contents.json diff --git a/Shared/Assets.xcassets/dollar.imageset/dollar-sign-solid.svg b/Shared/Assets.xcassets/custom_icon/dollar.imageset/dollar-sign-solid.svg similarity index 100% rename from Shared/Assets.xcassets/dollar.imageset/dollar-sign-solid.svg rename to Shared/Assets.xcassets/custom_icon/dollar.imageset/dollar-sign-solid.svg diff --git a/Shared/Assets.xcassets/custom_icon/exclamation.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/exclamation.imageset/Contents.json new file mode 100644 index 0000000..c82dff9 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/exclamation.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "exclamation-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/exclamation.imageset/exclamation-solid.svg b/Shared/Assets.xcassets/custom_icon/exclamation.imageset/exclamation-solid.svg new file mode 100644 index 0000000..bb39970 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/exclamation.imageset/exclamation-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/fan.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/fan.imageset/Contents.json new file mode 100644 index 0000000..741d74c --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/fan.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "fan-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/fan.imageset/fan-solid.svg b/Shared/Assets.xcassets/custom_icon/fan.imageset/fan-solid.svg new file mode 100644 index 0000000..041671e --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/fan.imageset/fan-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/fire.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/fire.imageset/Contents.json similarity index 100% rename from Shared/Assets.xcassets/fire.imageset/Contents.json rename to Shared/Assets.xcassets/custom_icon/fire.imageset/Contents.json diff --git a/Shared/Assets.xcassets/fire.imageset/fire-solid.svg b/Shared/Assets.xcassets/custom_icon/fire.imageset/fire-solid.svg similarity index 100% rename from Shared/Assets.xcassets/fire.imageset/fire-solid.svg rename to Shared/Assets.xcassets/custom_icon/fire.imageset/fire-solid.svg diff --git a/Shared/Assets.xcassets/custom_icon/floppy.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/floppy.imageset/Contents.json new file mode 100644 index 0000000..f686d07 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/floppy.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "floppy-disk-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/floppy.imageset/floppy-disk-solid.svg b/Shared/Assets.xcassets/custom_icon/floppy.imageset/floppy-disk-solid.svg new file mode 100644 index 0000000..464c1c0 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/floppy.imageset/floppy-disk-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/missing.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/missing.imageset/Contents.json similarity index 100% rename from Shared/Assets.xcassets/missing.imageset/Contents.json rename to Shared/Assets.xcassets/custom_icon/missing.imageset/Contents.json diff --git a/Shared/Assets.xcassets/missing.imageset/times-solid.svg b/Shared/Assets.xcassets/custom_icon/missing.imageset/times-solid.svg similarity index 100% rename from Shared/Assets.xcassets/missing.imageset/times-solid.svg rename to Shared/Assets.xcassets/custom_icon/missing.imageset/times-solid.svg diff --git a/Shared/Assets.xcassets/custom_icon/poo.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/poo.imageset/Contents.json new file mode 100644 index 0000000..1a22f96 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/poo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "poo-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/poo.imageset/poo-solid.svg b/Shared/Assets.xcassets/custom_icon/poo.imageset/poo-solid.svg new file mode 100644 index 0000000..2815329 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/poo.imageset/poo-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/skull.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/skull.imageset/Contents.json new file mode 100644 index 0000000..b4597c4 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/skull.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "skull-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/skull.imageset/skull-solid.svg b/Shared/Assets.xcassets/custom_icon/skull.imageset/skull-solid.svg new file mode 100644 index 0000000..2972599 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/skull.imageset/skull-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/skull2.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/skull2.imageset/Contents.json new file mode 100644 index 0000000..5f338ee --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/skull2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "skull-crossbones-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/skull2.imageset/skull-crossbones-solid.svg b/Shared/Assets.xcassets/custom_icon/skull2.imageset/skull-crossbones-solid.svg new file mode 100644 index 0000000..c4e92ee --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/skull2.imageset/skull-crossbones-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Assets.xcassets/custom_icon/x.imageset/Contents.json b/Shared/Assets.xcassets/custom_icon/x.imageset/Contents.json new file mode 100644 index 0000000..8e1cbc7 --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/x.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "x-solid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Shared/Assets.xcassets/custom_icon/x.imageset/x-solid.svg b/Shared/Assets.xcassets/custom_icon/x.imageset/x-solid.svg new file mode 100644 index 0000000..3f6383c --- /dev/null +++ b/Shared/Assets.xcassets/custom_icon/x.imageset/x-solid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Shared/Models/CustomIcon.swift b/Shared/Models/CustomIcon.swift new file mode 100644 index 0000000..8457154 --- /dev/null +++ b/Shared/Models/CustomIcon.swift @@ -0,0 +1,32 @@ +// +// CustomIcon.swift +// Feels (iOS) +// +// Created by Trey Tartt on 2/13/22. +// + +import SwiftUI + +class CustomIcon: ObservableObject { + init(leftEye: AnyView, + rightEye: AnyView, + mouth: AnyView, + background: [(AnyView, UUID)], + bgColor: Color, + innerColor: Color) { + self.leftEye = leftEye + self.rightEye = rightEye + self.mouth = mouth + self.background = background + self.bgColor = bgColor + self.innerColor = innerColor + } + + @Published var leftEye: AnyView + @Published var rightEye: AnyView + @Published var mouth: AnyView + + @Published var background: [(AnyView, UUID)] + @Published var bgColor: Color + @Published var innerColor: Color +} diff --git a/Shared/views/CreateIconView.swift b/Shared/views/CreateIconView.swift index 320d269..41e3569 100644 --- a/Shared/views/CreateIconView.swift +++ b/Shared/views/CreateIconView.swift @@ -7,17 +7,6 @@ import SwiftUI - -struct CustomIcon { - let leftEye: Image - let rightEye: Image - let mouth: Image - - let background: AnyView? - let bgColor: Color - let innerColor: Color -} - enum BackGroundOptions: String, CaseIterable { case horrible case bad @@ -40,35 +29,64 @@ enum EyeOptions: String, CaseIterable { case fire = "fire" case bolt = "bolt2" case dollar = "dollar" + case bell = "bell" + case btc = "btc" + case code = "code" + case crown = "crown" + case divide = "divide" + case exclamation = "exclamation" + case fan = "fan" + case floppy = "floppy" + case x = "x" + case skull = "skull" + case covid = "covid" + case bomb = "bomb" + case skull2 = "skull2" + case poo = "poo" static public var defaultOption: AnyView { let image = Image(EyeOptions.fire.rawValue, bundle: .main) .resizable() .frame(width: 20, height: 20) return AnyView(image) - } } enum MouthOptions: String, CaseIterable { - case moonFill = "moon.fill" - case flame = "flame" - case flameCircle = "flame.circle" + case fire = "fire" + case bolt = "bolt2" + case dollar = "dollar" + case bell = "bell" + case btc = "btc" + case code = "code" + case crown = "crown" + case divide = "divide" + case exclamation = "exclamation" + case fan = "fan" + case floppy = "floppy" + case x = "x" + case skull = "skull" + case covid = "covid" + case bomb = "bomb" + case skull2 = "skull2" + case poo = "poo" - static public var defaultOption: MouthOptions { - return MouthOptions.flameCircle + static public var defaultOption: AnyView { + let image = Image(MouthOptions.bomb.rawValue, bundle: .main) + .resizable() + .frame(width: 20, height: 20) + return AnyView(image) } } struct CreateIconView: View { - @State private var bgColor = Color.red - @State private var innerColor = Color.green - @State private var bgPattern = [(AnyView, UUID)]() - - @State private var leftEye: AnyView = EyeOptions.defaultOption - @State private var rightEye: AnyView = EyeOptions.defaultOption - - @State private var mouth: Image = Image(systemName: MouthOptions.defaultOption.rawValue) + @State private var mouth: AnyView = MouthOptions.defaultOption + @StateObject private var customIcon = CustomIcon(leftEye: EyeOptions.defaultOption, + rightEye: EyeOptions.defaultOption, + mouth: MouthOptions.defaultOption, + background: [(AnyView, UUID)](), + bgColor: .red, + innerColor: .green) private var randomElements: [AnyView] = [ AnyView(Image(BackGroundOptions.selectable.randomElement()!.rawValue) @@ -85,41 +103,26 @@ struct CreateIconView: View { .frame(width: 20, height: 20)) ] - let columns = [ - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0), - GridItem(.fixed(20), spacing: 0) - ] - func update(eye: Eyes, eyeOption: EyeOptions) { let image = Image(eyeOption.rawValue, bundle: .main) .resizable() .frame(width: 20, height: 20) switch eye { case .left: - leftEye = AnyView(image) + customIcon.leftEye = AnyView(image) case .right: - rightEye = AnyView(image) + customIcon.rightEye = AnyView(image) } } func createRandom() { - bgColor = Color( + customIcon.bgColor = Color( red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1) ) - innerColor = Color( + customIcon.innerColor = Color( red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1) @@ -133,11 +136,14 @@ struct CreateIconView: View { } func update(mouthOption: MouthOptions) { - mouth = Image(systemName: mouthOption.rawValue) + let image = AnyView(Image(mouthOption.rawValue, bundle: .main) + .resizable() + .frame(width: 20, height: 20)) + customIcon.mouth = image } func update(background: BackGroundOptions) { - bgPattern.removeAll() + customIcon.background.removeAll() if background == .random { for _ in 0...120 { @@ -147,7 +153,7 @@ struct CreateIconView: View { .resizable() .frame(width: 20, height: 20) - bgPattern.append((AnyView(sizedImage), UUID())) + customIcon.background.append((AnyView(sizedImage), UUID())) } return } @@ -158,7 +164,7 @@ struct CreateIconView: View { .frame(width: 20, height: 20) for _ in 0...120 { - bgPattern.append((AnyView(sizedImage), UUID())) + customIcon.background.append((AnyView(sizedImage), UUID())) } } @@ -176,44 +182,7 @@ struct CreateIconView: View { } var iconView: some View { - ZStack { - LazyVGrid(columns: columns, spacing: 0) { - ForEach(bgPattern, id: \.self.1) { - $0.0 - } - } - .frame(width: 200, height: 200) - .position(x: 100, y: 110) - - - Circle() - .strokeBorder(Color.black, lineWidth: 12) - .background(Circle().fill(innerColor)) - .frame(width: 120, height: 120, alignment: .center) - - VStack { - Spacer() - .frame(height: 70) - HStack { - Spacer() - .frame(width: 72) - leftEye - Spacer() - .frame(width: 24) - rightEye - Spacer() - } - Spacer() - .frame(height: 28) - mouth - Spacer() - } - } - .frame(width: 200, height: 200) - .background( - bgColor - ) - .cornerRadius(10) + IconView(customIcon: customIcon) } var body: some View { @@ -223,9 +192,9 @@ struct CreateIconView: View { Spacer() VStack { - ColorPicker("Set the background color", selection: $bgColor) + ColorPicker("Set the background color", selection: $customIcon.bgColor) .padding([.leading, .trailing]) - ColorPicker("Set the inner color", selection: $innerColor) + ColorPicker("Set the inner color", selection: $customIcon.innerColor) .padding([.leading, .trailing]) } @@ -244,7 +213,7 @@ struct CreateIconView: View { Menu("Right Eye") { ForEach(EyeOptions.allCases, id: \.self) { option in Button(action: { - update(eye: .right, eyeOption: option) + update(eye: .left, eyeOption: option) }, label: { Label(option.rawValue, image: option.rawValue) }) @@ -256,7 +225,7 @@ struct CreateIconView: View { Button(action: { update(mouthOption: option) }, label: { - Image(systemName: option.rawValue) + Label(option.rawValue, image: option.rawValue) }) } } @@ -296,12 +265,7 @@ struct CreateIconView: View { }) Button(action: { -// let newIcon = CustomIcon(leftEye: leftEye, -// rightEye: rightEye, -// mouth: mouth, -// background: bgPattern, -// bgColor: bgColor, -// innerColor: innerColor) +// let icon = icon }, label: { Text("Save") .font(.title) diff --git a/Shared/views/IconView.swift b/Shared/views/IconView.swift new file mode 100644 index 0000000..6ead6a2 --- /dev/null +++ b/Shared/views/IconView.swift @@ -0,0 +1,79 @@ +// +// IconView.swift +// Feels (iOS) +// +// Created by Trey Tartt on 2/13/22. +// + +import SwiftUI + +struct IconView: View { + @State public var customIcon: CustomIcon + + let columns = [ + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0), + GridItem(.fixed(20), spacing: 0) + ] + + var body: some View { + ZStack { + LazyVGrid(columns: columns, spacing: 0) { + ForEach(customIcon.background, id: \.self.1) { + $0.0 + } + } + .frame(width: 200, height: 200) + .position(x: 100, y: 110) + + + Circle() + .strokeBorder(Color.black, lineWidth: 12) + .background(Circle().fill(customIcon.innerColor)) + .frame(width: 120, height: 120, alignment: .center) + + VStack { + Spacer() + .frame(height: 70) + HStack { + Spacer() + .frame(width: 72) + customIcon.leftEye + Spacer() + .frame(width: 20) + customIcon.rightEye + Spacer() + } + Spacer() + .frame(height: 28) + customIcon.mouth + Spacer() + } + } + .frame(width: 200, height: 200) + .background( + customIcon.bgColor + ) + .cornerRadius(10) + } +} + +struct IconView_Previews: PreviewProvider { + static var previews: some View { + IconView(customIcon: CustomIcon(leftEye: EyeOptions.defaultOption, + rightEye: EyeOptions.defaultOption, + mouth: MouthOptions.defaultOption, + background: [(AnyView, UUID)](), + bgColor: .red, + innerColor: .green)) + } +}