From 63496725c8d30b6f3468f925b76ad35d7e64be0f Mon Sep 17 00:00:00 2001 From: Davide Date: Thu, 28 Nov 2024 22:59:37 +0100 Subject: [PATCH] Transparent logo in version screen (#963) Looks better on macOS and allows gradient on tvOS. --- .../About/macOS/AboutContentView+macOS.swift | 1 - .../AppUITV/Views/Profile/ProfileView.swift | 2 +- .../AppUITV/Views/Settings/SettingsView.swift | 2 +- .../Theme/Platforms/Theme+tvOS.swift | 10 +++--- .../UILibrary/Views/About/VersionView.swift | 30 ++++++++++++------ .../Assets.xcassets/Logo.imageset/Logo@2x.png | Bin 6271 -> 4833 bytes .../Assets.xcassets/Logo.imageset/Logo@3x.png | Bin 9543 -> 7835 bytes 7 files changed, 27 insertions(+), 18 deletions(-) diff --git a/Library/Sources/AppUIMain/Views/About/macOS/AboutContentView+macOS.swift b/Library/Sources/AppUIMain/Views/About/macOS/AboutContentView+macOS.swift index 56570ff4..0d5c8c65 100644 --- a/Library/Sources/AppUIMain/Views/About/macOS/AboutContentView+macOS.swift +++ b/Library/Sources/AppUIMain/Views/About/macOS/AboutContentView+macOS.swift @@ -69,7 +69,6 @@ struct AboutContentView: View whe } } } - .background(navigationRoute == .version ? theme.primaryColor : nil) .onLoad { navigationRoute = .version } diff --git a/Library/Sources/AppUITV/Views/Profile/ProfileView.swift b/Library/Sources/AppUITV/Views/Profile/ProfileView.swift index 155f64a3..e1fbc959 100644 --- a/Library/Sources/AppUITV/Views/Profile/ProfileView.swift +++ b/Library/Sources/AppUITV/Views/Profile/ProfileView.swift @@ -80,7 +80,7 @@ struct ProfileView: View, Routable, TunnelInstallationProviding { } } .ignoresSafeArea(edges: .horizontal) - .background(theme.primaryColor) + .background(theme.primaryGradient) .themeAnimation(on: showsSidePanel, category: .profiles) .defaultFocus($focusedField, .switchProfile) .onChange(of: tunnel.status, onTunnelStatus) diff --git a/Library/Sources/AppUITV/Views/Settings/SettingsView.swift b/Library/Sources/AppUITV/Views/Settings/SettingsView.swift index e3f79c6f..09fcc447 100644 --- a/Library/Sources/AppUITV/Views/Settings/SettingsView.swift +++ b/Library/Sources/AppUITV/Views/Settings/SettingsView.swift @@ -63,7 +63,7 @@ struct SettingsView: View { DetailView(detail: detail) .frame(maxWidth: .infinity) } - .background(theme.primaryColor) + .background(theme.primaryGradient) .onChange(of: focus) { guard focus != nil else { return diff --git a/Library/Sources/UILibrary/Theme/Platforms/Theme+tvOS.swift b/Library/Sources/UILibrary/Theme/Platforms/Theme+tvOS.swift index d55e658f..9ad53dde 100644 --- a/Library/Sources/UILibrary/Theme/Platforms/Theme+tvOS.swift +++ b/Library/Sources/UILibrary/Theme/Platforms/Theme+tvOS.swift @@ -34,11 +34,11 @@ extension Theme { secondaryWeight = .light } -// public var primaryGradient: AnyGradient { -// primaryColor -// .opacity(0.6) -// .gradient -// } + public var primaryGradient: AnyGradient { + primaryColor + .opacity(0.6) + .gradient + } } // MARK: - Shortcuts diff --git a/Library/Sources/UILibrary/Views/About/VersionView.swift b/Library/Sources/UILibrary/Views/About/VersionView.swift index 728b543e..592f8bf9 100644 --- a/Library/Sources/UILibrary/Views/About/VersionView.swift +++ b/Library/Sources/UILibrary/Views/About/VersionView.swift @@ -40,6 +40,26 @@ public struct VersionView: View where Icon: View { public var body: some View { ScrollView { + contentView + } +#if os(iOS) + .background(theme.primaryColor) + .foregroundStyle(.white) +#endif + } +} + +extension VersionView where Icon == LogoImage { + public init() { + icon = { + LogoImage() + } + } +} + +private extension VersionView { + var contentView: some View { + Group { icon() .padding(.top) Spacer() @@ -54,16 +74,6 @@ public struct VersionView: View where Icon: View { .padding() } } - .background(theme.primaryColor) - .foregroundStyle(.white) - } -} - -extension VersionView where Icon == LogoImage { - public init() { - icon = { - LogoImage() - } } } diff --git a/Passepartout/App/Assets.xcassets/Logo.imageset/Logo@2x.png b/Passepartout/App/Assets.xcassets/Logo.imageset/Logo@2x.png index c18bae2fd0353bba377da9f88e5a6ab3eddcf7dc..2000a14bc72af89c44e3cb73c61a3d36e5642ab1 100644 GIT binary patch literal 4833 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 literal 6271 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 q6&P~g-yIMV5+d*E>mA^F-_Knh@y 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 H&M*H13W>#S literal 9543 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 xAi1yMj=xt(xJQsDC_Fq|)!Ppl{J