From c8feeca41fc58f95372ce1dabf97e22054c49b8c Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Sat, 22 Apr 2023 17:20:49 +0200 Subject: [PATCH] Add playback mode to playback settings --- Shared/Player/PlaybackSettings.swift | 42 +++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Shared/Player/PlaybackSettings.swift b/Shared/Player/PlaybackSettings.swift index 390207b6..aaf129a3 100644 --- a/Shared/Player/PlaybackSettings.swift +++ b/Shared/Player/PlaybackSettings.swift @@ -62,6 +62,13 @@ struct PlaybackSettings: View { .frame(maxWidth: 50, alignment: .trailing) } + HStack { + controlsHeader("Playback Mode") + Spacer() + playbackModeControl + } + .padding(.vertical, 10) + HStack { controlsHeader("Rate") Spacer() @@ -77,7 +84,6 @@ struct PlaybackSettings: View { #endif } } - if player.activeBackend == .mpv { HStack { controlsHeader("Captions") @@ -281,6 +287,40 @@ struct PlaybackSettings: View { #endif } + @ViewBuilder var playbackModeControl: some View { + #if os(tvOS) + Button { + player.playbackMode = player.playbackMode.next() + } label: { + Label(player.playbackMode.description, systemImage: player.playbackMode.systemImage) + .transaction { t in t.animation = nil } + .frame(minWidth: 350) + } + #elseif os(macOS) + playbackModePicker + .modifier(SettingsPickerModifier()) + #if os(macOS) + .frame(maxWidth: 150) + #endif + #else + Menu { + playbackModePicker + } label: { + Label(player.playbackMode.description, systemImage: player.playbackMode.systemImage) + } + .transaction { t in t.animation = .none } + #endif + } + + var playbackModePicker: some View { + Picker("Playback Mode", selection: $player.playbackMode) { + ForEach(PlayerModel.PlaybackMode.allCases, id: \.rawValue) { mode in + Label(mode.description, systemImage: mode.systemImage).tag(mode) + } + } + .labelsHidden() + } + @ViewBuilder private var qualityProfileButton: some View { #if os(macOS) qualityProfilePicker