diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index d94e01da1..b80341ed1 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 4E0DED342D05695D00FEF007 /* SwiftUIJoystick in Frameworks */ = {isa = PBXBuildFile; productRef = 4E0DED332D05695D00FEF007 /* SwiftUIJoystick */; }; 4E4854022D138D7600A446A6 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E80AA622CD7122800029585 /* GameController.framework */; }; + 4EA5AE822D16807500AD0B9F /* SwiftSVG in Frameworks */ = {isa = PBXBuildFile; productRef = 4EA5AE812D16807500AD0B9F /* SwiftSVG */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -153,6 +154,7 @@ files = ( 4E4854022D138D7600A446A6 /* GameController.framework in Frameworks */, 4E0DED342D05695D00FEF007 /* SwiftUIJoystick in Frameworks */, + 4EA5AE822D16807500AD0B9F /* SwiftSVG in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -224,6 +226,7 @@ name = MeloNX; packageProductDependencies = ( 4E0DED332D05695D00FEF007 /* SwiftUIJoystick */, + 4EA5AE812D16807500AD0B9F /* SwiftSVG */, ); productName = MeloNX; productReference = 4E80A98D2CD6F54500029585 /* MeloNX.app */; @@ -309,6 +312,7 @@ minimizedProjectReferenceProxies = 1; packageReferences = ( 4E0DED322D05695D00FEF007 /* XCRemoteSwiftPackageReference "SwiftUIJoystick" */, + 4EA5AE802D16807500AD0B9F /* XCRemoteSwiftPackageReference "SwiftSVG" */, ); preferredProjectObjectVersion = 56; productRefGroup = 4E80A98E2CD6F54500029585 /* Products */; @@ -514,7 +518,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = F4QL9A2T88; + DEVELOPMENT_TEAM = 95J8WZ4TN8; ENABLE_PREVIEWS = YES; ENABLE_TESTABILITY = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -523,6 +527,7 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MeloNX/Info.plist; @@ -659,9 +664,13 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 0.0.8; - PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX1; + PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/Core/Headers/Ryujinx-Header.h"; @@ -679,7 +688,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = ""; - DEVELOPMENT_TEAM = F4QL9A2T88; + DEVELOPMENT_TEAM = 95J8WZ4TN8; ENABLE_PREVIEWS = YES; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -688,6 +697,7 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); GCC_OPTIMIZATION_LEVEL = 3; GENERATE_INFOPLIST_FILE = YES; @@ -825,9 +835,13 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 0.0.8; - PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX1; + PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/Core/Headers/Ryujinx-Header.h"; @@ -958,6 +972,14 @@ minimumVersion = 1.5.0; }; }; + 4EA5AE802D16807500AD0B9F /* XCRemoteSwiftPackageReference "SwiftSVG" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/mchoe/SwiftSVG"; + requirement = { + branch = master; + kind = branch; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -966,6 +988,11 @@ package = 4E0DED322D05695D00FEF007 /* XCRemoteSwiftPackageReference "SwiftUIJoystick" */; productName = SwiftUIJoystick; }; + 4EA5AE812D16807500AD0B9F /* SwiftSVG */ = { + isa = XCSwiftPackageProductDependency; + package = 4EA5AE802D16807500AD0B9F /* XCRemoteSwiftPackageReference "SwiftSVG" */; + productName = SwiftSVG; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 4E80A9852CD6F54500029585 /* Project object */; diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 6af5f2dd7..df7662661 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,6 +1,15 @@ { - "originHash" : "0c2b07bd02731650383ed39e41433281bed19b2ed6cc7103e7daec7fb1d05e44", + "originHash" : "1b46f7a56d6f994a826e31441c25b929398800cf38b3e9be23ae6e0ef8fc32c7", "pins" : [ + { + "identity" : "swiftsvg", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mchoe/SwiftSVG", + "state" : { + "branch" : "master", + "revision" : "88b9ee086b29019e35f6f49c8e30e5552eb8fa9d" + } + }, { "identity" : "swiftuijoystick", "kind" : "remoteSourceControl", diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate index 56c9e3cb6..2433ad0d8 100644 Binary files a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate and b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/src/MeloNX/MeloNX/Assets/Assets.xcassets/troll.dataset/Contents.json b/src/MeloNX/MeloNX/Assets/Assets.xcassets/troll.dataset/Contents.json new file mode 100644 index 000000000..64176723f --- /dev/null +++ b/src/MeloNX/MeloNX/Assets/Assets.xcassets/troll.dataset/Contents.json @@ -0,0 +1,13 @@ +{ + "data" : [ + { + "filename" : "Troll-Face.svg", + "idiom" : "universal", + "universal-type-identifier" : "public.svg-image" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/src/MeloNX/MeloNX/Assets/Assets.xcassets/troll.dataset/Troll-Face.svg b/src/MeloNX/MeloNX/Assets/Assets.xcassets/troll.dataset/Troll-Face.svg new file mode 100644 index 000000000..e3b3f7785 --- /dev/null +++ b/src/MeloNX/MeloNX/Assets/Assets.xcassets/troll.dataset/Troll-Face.svg @@ -0,0 +1,16 @@ + + .str0 {stroke:black;stroke-width:0.238063} + .fil0 {fill:black} + .fil2 {fill:#050707} + .fil3 {fill:#881846} + .fil5 {fill:#F6BCD6} + .fil1 {fill:#F9DD56} + .fil4 {fill:#FDFCFD} + + + + + Layer 1 + + image/svg+xmlOpenclipartTrollface2011-04-03T12:59:21http://encyclopediadramatica.com/Trollfacehttps://openclipart.org/detail/130795/trollface-by-ronesronesfacememetrolltrollface + \ No newline at end of file diff --git a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/Contents.json b/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/Contents.json deleted file mode 100644 index 5a3a6fcda..000000000 --- a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "trollstore.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "trollstore 1.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "trollstore 2.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore 1.png b/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore 1.png deleted file mode 100644 index be41e411a..000000000 Binary files a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore 1.png and /dev/null differ diff --git a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore 2.png b/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore 2.png deleted file mode 100644 index be41e411a..000000000 Binary files a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore 2.png and /dev/null differ diff --git a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore.png b/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore.png deleted file mode 100644 index be41e411a..000000000 Binary files a/src/MeloNX/MeloNX/Assets/Assets.xcassets/trollstore.imageset/trollstore.png and /dev/null differ diff --git a/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift b/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift index f5542da9b..bb23f964e 100644 --- a/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift +++ b/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift @@ -6,6 +6,7 @@ // import SwiftUI +import SwiftSVG struct SettingsView: View { @Binding var config: Ryujinx.Configuration @@ -262,7 +263,7 @@ struct SettingsView: View { Section { DisclosureGroup { Toggle(isOn: $useTrollStore) { - labelWithpng("TrollStore", iconName: "trollstore") + labelWithIcon("TrollStore", iconName: "troll.svg") } .tint(.blue) @@ -373,9 +374,20 @@ struct SettingsView: View { } @ViewBuilder - private func labelWithIcon(_ text: String, iconName: String) -> some View { + private func labelWithIcon(_ text: String, iconName: String, flipimage: Bool? = nil) -> some View { HStack(spacing: 8) { - if !iconName.isEmpty { + if iconName.hasSuffix(".svg"){ + if let flipimage, flipimage { + SVGView(svgName: iconName, color: .blue) + .symbolRenderingMode(.hierarchical) + .frame(width: 20, height: 20) + .rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0)) + } else { + SVGView(svgName: iconName, color: .blue) + .symbolRenderingMode(.hierarchical) + .frame(width: 20, height: 20) + } + } else if !iconName.isEmpty { Image(systemName: iconName) .symbolRenderingMode(.hierarchical) .foregroundStyle(.blue) @@ -384,14 +396,36 @@ struct SettingsView: View { } .font(.body) } - func labelWithpng(_ text: String, iconName: String) -> some View { - HStack { - Image(iconName) // Loads the PNG from the Assets folder - .resizable() - .scaledToFit() - .frame(width: 20, height: 20) // Adjust size as needed - Text(text) +} + + +struct SVGView: UIViewRepresentable { + var svgName: String + var color: Color = Color.black + + func makeUIView(context: Context) -> UIView { + var svgName = svgName + var hammock = UIView() + + if svgName.hasSuffix(".svg") { + svgName.removeLast(4) + } + + + + let svgLayer = UIView(SVGNamed: svgName) { svgLayer in + svgLayer.fillColor = UIColor(color).cgColor // Apply the provided color + svgLayer.resizeToFit(hammock.frame) + hammock.layer.addSublayer(svgLayer) + } + + return hammock + } + + func updateUIView(_ uiView: UIView, context: Context) { + // Update the SVG view's fill color when the color changes + if let svgLayer = uiView.layer.sublayers?.first as? CAShapeLayer { + svgLayer.fillColor = UIColor(color).cgColor } } } -