mirror of
https://github.com/yattee/yattee.git
synced 2026-10-23 21:22:53 +00:00
Use a scheme-adaptive background for tvOS full screen covers
tvOS full screen covers are transparent, so each one filled itself with a hardcoded black — invisible black-on-black text under the light color scheme (e.g. the View All Comments page). A shared tvFullScreenCoverBackground() modifier now picks black or light gray from the color scheme; applied to the comments cover, subscription destination picker, instance login, edit source, iCloud progress, and legacy accounts import covers.
This commit is contained in:
@@ -367,8 +367,6 @@ struct SubscriptionDestinationPicker: View {
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
Color.black.ignoresSafeArea()
|
||||
|
||||
VStack(alignment: .leading, spacing: 24) {
|
||||
Text(String(localized: "channel.menu.subscribeOn"))
|
||||
.font(.title2.bold())
|
||||
@@ -395,6 +393,8 @@ struct SubscriptionDestinationPicker: View {
|
||||
.padding(.horizontal, 80)
|
||||
.padding(.vertical, 60)
|
||||
}
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.tvFullScreenCoverBackground()
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
39
Yattee/Views/Components/TVFullScreenCoverBackground.swift
Normal file
39
Yattee/Views/Components/TVFullScreenCoverBackground.swift
Normal file
@@ -0,0 +1,39 @@
|
||||
//
|
||||
// TVFullScreenCoverBackground.swift
|
||||
// Yattee
|
||||
//
|
||||
// Scheme-adaptive opaque background for tvOS full screen covers.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
#if os(tvOS)
|
||||
/// tvOS full screen covers have a transparent background, letting the view
|
||||
/// below leak through, so they need an explicit opaque fill. A hardcoded
|
||||
/// black makes primary (black) text invisible under the light color scheme,
|
||||
/// so the fill follows the scheme instead.
|
||||
struct TVFullScreenCoverBackgroundModifier: ViewModifier {
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
|
||||
func body(content: Content) -> some View {
|
||||
content
|
||||
.background(
|
||||
(colorScheme == .dark ? Color.black : Color(white: 0.92))
|
||||
.ignoresSafeArea()
|
||||
)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
extension View {
|
||||
/// Gives a tvOS full screen cover an opaque, color-scheme-appropriate
|
||||
/// background. No-op on other platforms.
|
||||
@ViewBuilder
|
||||
func tvFullScreenCoverBackground() -> some View {
|
||||
#if os(tvOS)
|
||||
modifier(TVFullScreenCoverBackgroundModifier())
|
||||
#else
|
||||
self
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -552,7 +552,7 @@ struct InstanceBrowseView: View {
|
||||
TVSidebarDetailContainer(systemImage: "pencil.circle", title: String(localized: "sources.editSource")) {
|
||||
EditSourceView(source: .remoteServer(instance))
|
||||
}
|
||||
.background(Color.black.ignoresSafeArea())
|
||||
.tvFullScreenCoverBackground()
|
||||
}
|
||||
#else
|
||||
.sheet(isPresented: $showEditInstance) {
|
||||
|
||||
@@ -54,7 +54,7 @@ struct InstanceLoginView: View {
|
||||
formContent
|
||||
}
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.background(Color.black.ignoresSafeArea())
|
||||
.tvFullScreenCoverBackground()
|
||||
.accessibilityIdentifier("instance.login.view")
|
||||
#else
|
||||
NavigationStack {
|
||||
|
||||
@@ -1989,9 +1989,7 @@ struct VideoInfoView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
#if os(tvOS)
|
||||
.background(Color.black.ignoresSafeArea())
|
||||
#endif
|
||||
.tvFullScreenCoverBackground()
|
||||
.navigationTitle(String(localized: "videoInfo.section.comments"))
|
||||
#if os(iOS)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
|
||||
Reference in New Issue
Block a user