1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-13 13:50:32 +05:30
yattee/Shared/Player/PlayerBackendView.swift

98 lines
3.0 KiB
Swift
Raw Normal View History

2022-08-06 18:57:34 +05:30
import SwiftUI
struct PlayerBackendView: View {
#if os(iOS)
@Environment(\.verticalSizeClass) private var verticalSizeClass
#endif
@ObservedObject private var player = PlayerModel.shared
2022-08-06 18:57:34 +05:30
var body: some View {
ZStack(alignment: .top) {
Group {
2022-12-21 03:51:12 +05:30
ZStack {
Group {
switch player.activeBackend {
case .mpv:
player.mpvPlayerView
case .appleAVPlayer:
player.avPlayerView
}
}
.zIndex(0)
ControlsGradientView()
.zIndex(1)
2022-08-06 18:57:34 +05:30
}
}
.overlay(GeometryReader { proxy in
Color.clear
2022-08-13 20:16:45 +05:30
.onAppear { player.playerSize = proxy.size }
2022-08-06 18:57:34 +05:30
.onChange(of: proxy.size) { _ in player.playerSize = proxy.size }
.onChange(of: player.controls.presentingOverlays) { _ in player.playerSize = proxy.size }
})
#if os(iOS)
.padding(.top, player.playingFullScreen && verticalSizeClass == .regular ? 20 : 0)
#endif
#if !os(tvOS)
PlayerGestures()
PlayerControls()
2022-08-06 18:57:34 +05:30
#if os(iOS)
.padding(.top, controlsTopPadding)
.padding(.bottom, controlsBottomPadding)
#endif
#else
hiddenControlsButton
2022-08-06 18:57:34 +05:30
#endif
}
#if os(iOS)
2022-09-02 04:35:31 +05:30
.statusBarHidden(player.playingFullScreen)
2022-08-06 18:57:34 +05:30
#endif
}
#if os(iOS)
var controlsTopPadding: Double {
2022-09-02 04:35:31 +05:30
guard player.playingFullScreen else { return 0 }
2022-08-06 18:57:34 +05:30
if UIDevice.current.userInterfaceIdiom != .pad {
2022-08-07 17:41:57 +05:30
return verticalSizeClass == .compact ? SafeArea.insets.top : 0
2022-08-06 18:57:34 +05:30
} else {
2022-08-07 17:41:57 +05:30
return SafeArea.insets.top.isZero ? SafeArea.insets.bottom : SafeArea.insets.top
2022-08-06 18:57:34 +05:30
}
}
var controlsBottomPadding: Double {
2022-09-02 04:35:31 +05:30
guard player.playingFullScreen else { return 0 }
2022-08-06 18:57:34 +05:30
if UIDevice.current.userInterfaceIdiom != .pad {
2022-09-02 04:35:31 +05:30
return player.playingFullScreen && verticalSizeClass == .compact ? SafeArea.insets.bottom : 0
2022-08-06 18:57:34 +05:30
} else {
2022-09-02 04:35:31 +05:30
return player.playingFullScreen ? SafeArea.insets.bottom : 0
2022-08-06 18:57:34 +05:30
}
}
#endif
#if os(tvOS)
private var hiddenControlsButton: some View {
VStack {
Button {
player.controls.show()
} label: {
EmptyView()
}
.offset(y: -100)
.buttonStyle(.plain)
.background(Color.clear)
.foregroundColor(.clear)
}
}
#endif
2022-08-06 18:57:34 +05:30
}
struct PlayerBackendView_Previews: PreviewProvider {
static var previews: some View {
PlayerBackendView()
.injectFixtureEnvironmentObjects()
}
}